首页
学习
活动
专区
圈层
工具
发布

jquery 0 ms
EN

Stack Overflow用户
提问于 2012-08-22 13:03:20
回答 2查看 1.5K关注 0票数 1

可能重复: 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

代码语言:javascript
复制
                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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-22 13:06:28

这是IE6和IE7的一个独特之处,它们可以从缓存中检索AJAX结果,而无需触发XMLHTTPRequest回调,而是立即将其readyState属性设置为4

但是,$.ajax的API契约要求它为异步请求立即返回(即不调用程序员提供的回调)。

因此,对这些缓存的结果进行$.ajax调用测试,然后使用setTimeout伪造所需的异步回调。

$.ajax调用完成,一旦浏览器重新进入其事件处理循环,它将发现(立即过期) timer事件并调用其回调。

票数 3
EN

Stack Overflow用户

发布于 2012-08-22 13:05:34

原因是setTimeout将函数添加到浏览器事件队列中,因此只有在处理队列中的前面事件之后才会调用该函数,从而允许设置超时的函数的其余部分完成执行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12073790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档