AjaxSuccess/Ajaxerror与AjaxComplete的jQuery时间



我似乎无法在此找到确定的答案,并且文档并不能完全清楚。

从我的理解以及其他答案中,全局ajaxComplete事件发生在全局ajaxSuccessajaxError事件之后。

话虽如此,这两组事件之间的时序关系是什么?

  • ajaxComplete是否只是保证在ajaxSuccess/ajaxError启动之后开始?
  • ajaxComplete是否可以保证一旦ajaxSuccess/ajaxError完成?
  • 不保证?

作为一些背景,我正在尝试确保我的ajaxComplete处理程序直到ajaxSuccess/ajaxError处理程序完成后才能运行。

ajaxComplete触发完成后 ajaxSuccess/ajaxError处理程序。

这是JQuery 2.1.4的相关代码(在JQuery 1.11.3中也相同):

// Status-dependent callbacks
jqXHR.statusCode( statusCode );
statusCode = undefined;
if ( fireGlobals ) {
    globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
        [ jqXHR, s, isSuccess ? success : error ] );
}
// Complete
completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
if ( fireGlobals ) {
    globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
    // Handle the global AJAX counter
    if ( !( --jQuery.active ) ) {
        jQuery.event.trigger("ajaxStop");
    }
}

要验证它,我设置了一个实验,可以任意指定ajaxSuccess处理程序需要完成多长时间。

$(document).ajaxSuccess(function (e, xhr, settings) {
    var startTime = (new Date()).getTime();
    // Intentionally waste an arbitrary length of time
    while ( (new Date()).getTime() - startTime < 1000 ) { }
    var endTime = (new Date()).getTime();
    console.log('ajaxSuccessn'
              + '    Start: ' + startTime + 'n'
              + '    End:   ' + endTime
    );
});
$(document).ajaxComplete(function (e, xhr, settings) {
    var startTime = (new Date()).getTime();
    console.log('ajaxCompleten'
              + '    Start: ' + startTime
    );
});
$.get('/');

实验证实了我以前观察到的内容,即ajaxSuccess/ajaxError始终在ajaxComplete之前完成,无论花了多长时间。

此处找到的文档


来自文档:

事件

这是Ajax事件的完整列表,也是他们的顺序 被触发。缩进事件都是为每一个触发的 AJAX请求(除非设置了全局选项)。Ajaxstart和 AJAXSTOP事件是与所有AJAX请求相关的事件。

  • ajaxstart(全局事件):如果AJAX,则触发此事件 启动了请求,目前没有其他AJAX请求。
    • beforesend(本地事件):此事件是在启动AJAX请求之前触发的,允许您修改XMLHTTPRequest 对象(如果需要的话,设置其他标题。)
    • ajaxsend(全局 事件):在运行请求之前也触发了此全局事件。
    • 成功(本地事件):仅当请求成功时才调用此事件(服务器没有错误,数据没有错误)。
    • ajaxsuccess(全局事件):仅在此事件时才调用 要求成功。
    • 错误(本地事件):仅在请求中发生错误时才调用此事件(您永远不会既有错误,又可以通过请求进行成功回调)。
    • ajaxerror(全局事件):此全局事件的行为与本地错误事件相同。
    • 完成(本地事件):无论请求是否成功,此事件都被称为。即使是同步请求,您将始终收到完整的回调。
    • ajaxcomplete(全局事件):此事件的行为与完整事件相同,并且每次Ajax请求完成时都会触发。
  • ajaxstop(全局事件):如果不再处理AJAX请求,则将触发此全局事件。

最新更新