日期:2014-05-16  浏览次数:20918 次

jquery ajax中的timeout问题
jquery ajax中的timeout会覆盖全局设置,如果timeout设置成5s,循环100次$.ajax(),这100次都在5s的时间限制内,超过5s这100个ajax都会被认定为超时,有没有办法针对每一个ajax设定一个timeout?
------解决方案--------------------
timeout (Number) : 设置请求超时时间(毫秒)。此设置将覆盖全局设置。

单独配置
------解决方案--------------------
引用:
timeout (Number) : 设置请求超时时间(毫秒)。此设置将覆盖全局设置。

单独配置

我就是不知道怎么单独配置。。
------解决方案--------------------
....

那不是发送请求的时候随便添加这个参数,需要$.ajax,这个才支持,不要使用$.get或者$.post等,这些配置不了

$.ajax({
timeout:100000
/*其他配置*/
});

------解决方案--------------------
引用:
....

那不是发送请求的时候随便添加这个参数,需要$.ajax,这个才支持,不要使用$.get或者$.post等,这些配置不了

JScript code
$.ajax({
timeout:100000
/*其他配置*/
});

for(i = 0;i<100;i++) {
$.ajax({
timeout:1500,
.......
});
}
比如执行一次$.ajax()需要1s,那么执行如上代码的话,后面的99次都会失败,因为timeout被覆盖成全局的,也就是过了1.5s之后,其余循环的$.ajax()也会被终止。
------解决方案--------------------
引用:
引用:

....

那不是发送请求的时候随便添加这个参数,需要$.ajax,这个才支持,不要使用$.get或者$.post等,这些配置不了

JScript code
$.ajax({
timeout:100000
/*其他配置*/
});

for(i = 0;i<100;i++) {
$.ajax({
timeout:1500,
......……


$.ajax是针对单个ajax发起的请求吧,不是对所有的,$.ajax后,只是对当前请求的ajax对象计算timeout,后面发起的应该从0开始,而不是从第一个发起的ajax计算
------解决方案--------------------
引用:
引用:

引用:

....

那不是发送请求的时候随便添加这个参数,需要$.ajax,这个才支持,不要使用$.get或者$.post等,这些配置不了

JScript code
$.ajax({
timeout:100000
/*其他配置*/
});

for(i = 0;i<100;i++) {
$.ajax({
timeo……

起初我也是这么想的,后来发现程序有问题,才知道timeout会覆盖全局设置。。所以才来这里发问的,不信你可以试一下
------解决方案--------------------
是哦。。测试后好像不是针对单个的。。这个就不清楚jq怎么搞法了。。
------解决方案--------------------
本帖最后由 showbo 于 2012-07-26 17:05:13 编辑 刚才又测试了下,应该还是针对单个的。。

用firebug看了下所有请求基本同一时间发出,然后经过指定的时间后就timetout了,应该是浏览器不能同时处理这么多ajax请求,导致后面的发送的ajax一直再等待前面的返回从而导致超时,而不是jq的timeout机制。
------解决方案--------------------
引用:
刚才又测试了下,应该还是针对单个的。。

用firebug看了下所有请求基本同一时间发出,然后经过指定的时间后就timetout了,应该是浏览器不能同时处理这么多ajax请求,导致后面的发送的ajax一直再等待前面的返回从而导致超时,而不是jq的timeout机制。

上面的例子忘了考虑延迟机制了,在实际情况中可能是循环了100个$.ajax(),但是服务器对这100个请求有个延迟处理,所以上面的例子并不能看到效果。。 大哥,你得相信我。。。jquery确实就这德行,我还没找到解决办法
------解决方案--------------------
呵呵,应该不是jquery的问题,ajax基本都同时发出去了,浏览器同时处理不了这么多请求

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

所以后面发出的请求没有处理到,但是计算timeout的计时器已经启动开始计时了,这样就造成了等待处理的时间也算进timeout里面了。这个jquery应该也没有办法解决,涉及到浏览器并发请求处理的问题了
------解决方案--------------------
引用:
呵呵,应该不是jquery的问题,ajax基本都同时发出去了,浏览器同时处理不了这么多请求

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