# AJAX 请求

`IncomingRequest::isAJAX()` 方法使用 `X-Requested-With` 请求头来判断请求是 XHR 还是普通请求。然而，最新的 JavaScript 实现（例如 fetch）不再随请求发送此请求头，因此 `IncomingRequest::isAJAX()` 的使用变得不太可靠，因为如果没有此请求头，就无法确定请求是否为 XHR。

为了解决这个问题，目前最有效的解决方案是手动定义请求头，强制将信息发送到服务器，服务器随后就能识别出该请求是 XHR。

以下是强制在 Fetch API 和其他 JavaScript 库中发送 `X-Requested-With` 请求头的方法。

## Fetch API

    fetch(url, {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          "X-Requested-With": "XMLHttpRequest"
        }
    });

## jQuery

对于 jQuery 等库，无需显式发送此请求头，因为根据 官方文档，它是所有 `$.ajax()` 请求的标准请求头。但如果你仍想强制发送以降低风险，只需按如下方式操作：

    $.ajax({
        url: "your url",
        headers: {'X-Requested-With': 'XMLHttpRequest'}
    });

## VueJS

在 VueJS 中，只要你使用 Axios 处理此类请求，只需将以下代码添加到 `created` 函数中即可。

    axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

## React

    axios.get("your url", {headers: {'Content-Type': 'application/json'}})

## htmx

可以使用 ajax-header 扩展。

    <body hx-ext="ajax-header">
    ...
    </body>