Possible Duplicate:
Why does setTimeout(fn, 0) sometimes help?
阅读 jQuery 1.8 源代码,
为什么 setTimeout 的延迟为 0 毫秒? (而不是仅仅执行回调?)
https://github.com/jquery/jquery/blob/1.8.0/src/ajax/xhr.js#L196
if ( !s.async ) {
callback();
} else if ( xhr.readyState === 4 ) {
// (IE6 & IE7) if it's in cache and has been
// retrieved directly we need to fire the callback
//-------->// WHY do setTimeout with 0 ms delay ?
setTimeout( callback, 0 );
} else {
handle = ++xhrId;
最佳答案
这是针对 IE6 和 IE7 特性的一种解决方法,可以从缓存中检索 AJAX 结果,而无需触发 XMLHTTPRequest
回调,立即将其 readyState
属性设置为 4
,而是。
但是,$.ajax
的 API 契约要求它立即返回异步请求(即不调用程序员提供的回调)。
因此,$.ajax
调用测试这些缓存的结果,然后使用 setTimeout
伪造所需的异步回调。
$.ajax
调用完成,一旦浏览器重新进入其事件处理循环,它就会找到(立即过期的)计时器事件并调用其回调。
关于jquery ajax setTimeout 0 毫秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073790/