AJAX 請求

IncomingRequest::isAJAX() 方法使用 X-Requested-With 標頭來定義這個請求是 XHR 請求還是普通請求。然而,最新的 JavaScript 實作方法(例如: fetch) 並不會再發送這個標頭,因此 IncomingRequest::isAJAX() 將變得不這麼可靠了,因為沒有這個標頭就無法定義請求是否為 XHR 。

為了解決這個問題,最有效的方式(截至目前為止)就是手動定義請求了。強制將訊息傳送給伺服器,這樣就能辨識出這個請求是 XHR 。

下面將會向你演示如何在 Fetch API 和其他的 JavaScript 程式庫中,強制發送 X-Requested-With 標頭的方法。

Fetch API

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

jQuery

對於 jQuery 這個程式庫來說,不需要特意傳送這個標頭。根據 官方使用文件 ,它是所有 $.ajax() 都會附帶的標準標頭。若是你不想冒險,還是想強制傳送這個標頭的話,按照下面的方式做就可以了:

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

VueJS

在 VueJS 中,若是你只使用 Axios 來處理這種類型的請求的話,你只需要在 創建 的函數中加入以下程式碼。

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

React

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