我似乎找不到确切的答案,而the documentation并不清楚。
据我了解,以及从other answers所提到的,全局ajaxComplete
事件发生在全局ajaxSuccess
或ajaxError
事件之后。
话虽如此,这两组事件之间的时间关系是什么?
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('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/