Ajax 事件


Ajax 要求會產生許多不同的事件,您可以訂閱這些事件。以下是事件的完整清單,以及觸發順序。

有兩種事件類型

本機事件

這些是可以訂閱的回呼,就像在 Ajax 要求物件中一樣

1
2
3
4
5
6
7
8
9
$.ajax({
beforeSend: function(){
// Handle the beforeSend event
},
complete: function(){
// Handle the complete event
}
// ......
});

全域事件

這些事件觸發在 document 上,呼叫任何可能正在監聽的處理常式。您可以像這樣監聽這些事件

 $(document).on("ajaxSend", function(){
   $("#loading").show();
 }).on("ajaxComplete", function(){
   $("#loading").hide();
 });

可以透過傳入全域選項來停用特定 Ajax 要求的全域事件,就像這樣

1
2
3
4
5
$.ajax({
url: "test.html",
global: false,
// ...
});

事件

以下是 Ajax 事件的完整清單,以及觸發順序。縮排的事件會針對每個 Ajax 要求觸發 (除非已設定全域選項)。ajaxStart 和 ajaxStop 事件是與所有 Ajax 要求相關的事件。

  • ajaxStart (全域事件)
    如果 Ajax 要求已啟動,且目前沒有其他 Ajax 要求正在執行,則會觸發此事件。
    • beforeSend (本機事件)
      這個事件在 Ajax 請求開始前觸發,讓您可以修改 XMLHttpRequest 物件(必要時設定其他標頭)。
    • ajaxSend(全域事件)
      這個全域事件也會在請求執行前觸發。
    • success(區域事件)
      只有在請求成功時才會呼叫這個事件(沒有伺服器錯誤,沒有資料錯誤)。
    • ajaxSuccess(全域事件)
      只有在請求成功時才會呼叫這個事件。
    • error(區域事件)
      只有在請求發生錯誤時才會呼叫這個事件(請求中絕不會同時有錯誤和成功回呼)。
    • ajaxError(全域事件)
      這個全域事件的行為與區域錯誤事件相同。
    • complete(區域事件)
      無論請求是否成功,都會呼叫這個事件。您將永遠會收到一個 complete 回呼,即使是同步請求。
    • ajaxComplete(全域事件)
      這個事件的行為與 complete 事件相同,而且會在每次 Ajax 請求結束時觸發。
  • ajaxStop(全域事件)
    如果沒有更多 Ajax 請求正在處理中,就會觸發這個全域事件。