jQuery ajax timeout讨论

  今天在csdn看到了一个“jquery ajax中的timeout问题”,地址http://topic.csdn.net/u/20120726/10/0fc851fd-fb54-455c-85db-4b60ffd2e375.html,一个人同时发送了100个ajax请求,timeout设置为5s,只返回了前面几个的ajax请求,后面ajax请求全部超时。
 
  这个超时问题是jquery的timeout没处理好吗?其实我觉得不是,是浏览器并发请求处理数量有限制,导致后面发送的ajax请求需要等待前面发送的ajax处理完毕后才能继续。

  查看jquery的源代码我们会发现,jquery处理超时是通过计时器setTImeout来完成的,代码如下

         // Timeout checker
        if (s.async && s.timeout > 0) {
            setTimeout(function () {
                // Check to see if the request is still happening
                if (xhr && !requestDone) {
                    onreadystatechange("timeout");
                }
            }, s.timeout);
        }

  由于浏览器并发处理个数有限制,导致后面发出的请求需要等待前面的请求完成才能做进步一操作,这样前面发送的请求的时间也算到后面的请求上了。因为ajax基本是同时发送的,计时器也同时启动,但是浏览器处理并发请求有数量限制,导致后面的请求被挂起,计时器可不是闲着的,还是继续计算时间的。

  就如打开网站为什么不是上下同时打开,而是先打开上面的再到下面的,这个是因为浏览器并发请求数有限制的问题,导致需要先把前面的请求处理完了才继续处理后续的请求。

  这个jquery应该也没有办法解决,涉及到浏览器并发请求处理的问题了。

加支付宝好友偷能量挖...


原创文章,转载请注明出处:jQuery ajax timeout讨论

评论(0)Web开发网
阅读(239)喜欢(1)JavaScript/Ajax开发技巧