事件 - htmx:beforeSend

htmx:beforeSend 是 HTMX 在即将发送请求(GET、POST 等)之前触发的事件。你可以在这个事件中:

  • 修改请求头(如添加 token)

  • 添加/修改请求参数

  • 阻止请求发送

  • 显示 loading 动画

它相当于 AJAX 中 XMLHttpRequest 的 .open() 后、.send() 前的 hook。

详情

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

示例代码

<button 
  hx-get="/data" 
  hx-target="#result" 
  hx-swap="innerHTML">
  加载数据
</button>

<div id="result"></div>

<script>
  document.body.addEventListener("htmx:beforeSend", function(evt) {
    const xhr = evt.detail.xhr;
    console.log("准备发送请求到:", evt.detail.path);

    // 添加自定义头部
    xhr.setRequestHeader("X-Security-Token", "Security Token");

    // 显示加载动画
    document.querySelector("#result").innerText = "加载中...";
  });
</script>

应用场景

用途 示例
注入认证头 添加 JWT 或 API token
动态设置参数 在请求前动态修改 query 参数或表单数据
加载动画 请求开始前激活 spinner 或禁用按钮
请求统计 上报即将发送的请求路径或数据
请求拦截 根据条件取消请求:evt.preventDefault()