javascript - ajaxSuccess/ajaxError 与 ajaxComplete 的 jQuery 计时

标签 javascript jquery ajax events

我似乎找不到关于这个和 the documentation 的明确答案没有说清楚。

从我的理解,以及从什么other answers已经提到,全局 ajaxComplete 事件发生在全局 ajaxSuccessajaxError 事件之后。

也就是说,这两组事件之间的时间关系是什么?

  • ajaxComplete 是否保证在 ajaxSuccess/ajaxError 启动后启动?
  • ajaxComplete 是否保证在 ajaxSuccess/ajaxError 完成后启动?
  • 没有保证?

作为背景知识,我试图确保我的 ajaxComplete 处理程序在 ajaxSuccess/ajaxError 之后才运行处理程序完成。

最佳答案

ajaxCompleteajaxSuccess/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('ajaxSuccess\n'
              + '    Start: ' + startTime + '\n'
              + '    End:   ' + endTime
    );
});

$(document).ajaxComplete(function (e, xhr, settings) {
    var startTime = (new Date()).getTime();
    console.log('ajaxComplete\n'
              + '    Start: ' + startTime
    );
});

$.get('/');

该实验证实了我之前观察到的情况,即 ajaxSuccess/ajaxError 总是在 ajaxComplete 开始之前完成,无论它持续多长时间拿走了。

关于javascript - ajaxSuccess/ajaxError 与 ajaxComplete 的 jQuery 计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127244/

相关文章:

c# - 文本框后面的标签

javascript - 如何防止用户影响按钮点击次数

jquery - 如何在 MVC 应用程序中返回 JSON 并循环遍历 jQuery 中返回的 json?

javascript - TypeError : Cannot read property 'whenReady' of undefined

javascript - CSS 中可以自定义混合颜色吗?

Javascript - Accordion 展开/折叠时设置文本

javascript - 如何使用 JS 或 JQuery/JS 框架通过所有浏览器选项卡发送信号(触发事件)?

javascript - 使用 jquery 或 Javascript 更改 RadTextbox(Telerik textbox) 和 RadDatePicker(Telerik DatePicker) 背景颜色

html - 重绘整个网页的请求的术语是什么?

javascript - 处理 Ajax 请求的响应