事件 - htmx:responseError

htmx:responseError 是 HTMX 提供的一个事件,用于在接收到来自服务器的响应后,但处理过程中发生错误时触发。这个事件不同于 htmx:sendError(发送失败)或 htmx:loadError(加载资源失败),它专门表示:

服务器响应成功到达,但内容解析、处理、替换过程中 出错,HTMX 无法完成预期行为。

这是 HTMX 中最常用且最有用的事件之一,服务器返回除 20*、30* 外的响应码都会触发该事件,如:401、404、500等。

事件参数

  • detail.xhr - XMLHttpRequest
  • detail.elt - 触发请求的元素
  • detail.target - 请求的目标
  • detail.requestConfig - AJAX请求的配置

示例代码

<div hx-get="/broken-html" hx-trigger="click" hx-target="#output" hx-swap="innerHTML">
  加载损坏的 HTML
</div>

<div id="output"></div>

<script>
  document.body.addEventListener("htmx:responseError", function (event) {
    console.error("HTMX 处理响应出错!", event.detail);
    alert("响应处理失败,请检查返回的 HTML 或目标元素。");
  });
</script>

以上是全局监听,也可以在触发 HTTP 请求的元素中局部监听:

<button type="button" 
    hx-post="login" 
    hx-on:htmx:response-error="console.log('error message');"<!-- 注意这里的写法 -->
>Login</button>