jquery ajax setTimeout 0 毫秒

标签 jquery ajax

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/

相关文章:

javascript - 在 jQuery UI Autocomplete 中, `response` 函数是在哪里实现的?

javascript - 单击时更新超链接

javascript - jQuery:如何匹配 ids 的最后部分

javascript - JQuery ajax 从来没有成功。有什么错误吗?

javascript - 服务器进程完成后清除ajax响应

c# - 如何使 ModalPopup 拖/放

php - 使用 javascript 获取 session

jquery - 如何使用 jQuery 从父元素引用数据?

javascript - 如何在 Protractor 自动化中使用 Javascript 命名空间?

javascript - 使用 JSON 和 Ajax 发送不可编辑的数组