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 请求,则会触发此全局事件。