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讨论