jquery ajax中的timeout问题

dzdouzi 2012-07-26 10:51:04
jquery ajax中的timeout会覆盖全局设置,如果timeout设置成5s,循环100次$.ajax(),这100次都在5s的时间限制内,超过5s这100个ajax都会被认定为超时,有没有办法针对每一个ajax设定一个timeout?
...全文
16643 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycnwyw 2013-08-12
  • 打赏
  • 举报
回复
引用 12 楼 dzdouzi 的回复:
[Quote=引用 11 楼 的回复:] 引用 10 楼 的回复: 呵呵,应该不是jquery的问题,ajax基本都同时发出去了,浏览器同时处理不了这么多请求 就如你打开网站为什么不是上下同时打开,而是先打开上面的再到下面的,这个是因为浏览器并发请求数有限制的问题,导致要先吧前面的加载完了才继续加载后面的内容。 所以后面发出的请求没有处理到,但是计算timeout的计时器已经启动开始计时了,这样就造成了等待处理的时间…… [/Quote] 我还想到一个办法,就是在beforesend设置一个settimeout,到了设置的时间后,自动执行error部分,这个有办法实现吗?不知道怎么跳转到error部分
可以在超时处理部分重新发送请求
ycnwyw 2013-08-12
  • 打赏
  • 举报
回复
引用 8 楼 showbo 的回复:
刚才又测试了下,应该还是针对单个的。。 用firebug看了下所有请求基本同一时间发出,然后经过指定的时间后就timetout了,应该是浏览器不能同时处理这么多ajax请求,导致后面的发送的ajax一直再等待前面的返回从而导致超时,而不是jq的timeout机制。
浏览器同时可以支持多个request请求(可能6个左右),ajax跟js是异步的操作,js循环100次是不等待ajax执行完的,而100个Ajax请求几乎同时发出,这样的话只能一批一批的发送请求,在等待的时候也会记录时间,所以会出现楼主说的情况,其他的请求都超时,可以尝试将循环写在ajax里面处理(或者js端或者服务器脚本端)
pjnihao 2012-11-09
  • 打赏
  • 举报
回复
现在我也是遇到了这个问题 , 在一个页面中 三处 数据要实现AJAX没20秒 刷新数据,可是在海信电视上的浏览器中就只能显示一处,其他两处就不能显示,可是在电脑上 IE 火狐 360 浏览器都是能实现 ,现在就不知道是什么原因 求帮助
dzdouzi 2012-07-28
  • 打赏
  • 举报
回复
没人了么?
Go 旅城通票 2012-07-26
  • 打赏
  • 举报
回复
timeout (Number) : 设置请求超时时间(毫秒)。此设置将覆盖全局设置。

单独配置
dzdouzi 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

引用 10 楼 的回复:

呵呵,应该不是jquery的问题,ajax基本都同时发出去了,浏览器同时处理不了这么多请求

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

所以后面发出的请求没有处理到,但是计算timeout的计时器已经启动开始计时了,这样就造成了等待处理的时间……
[/Quote]
我还想到一个办法,就是在beforesend设置一个settimeout,到了设置的时间后,自动执行error部分,这个有办法实现吗?不知道怎么跳转到error部分
dzdouzi 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

呵呵,应该不是jquery的问题,ajax基本都同时发出去了,浏览器同时处理不了这么多请求

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

所以后面发出的请求没有处理到,但是计算timeout的计时器已经启动开始计时了,这样就造成了等待处理的时间也算进timeout里面了。这个j……
[/Quote]
虽然问题没解决,非常感谢你的耐心解答~
Go 旅城通票 2012-07-26
  • 打赏
  • 举报
回复
呵呵,应该不是jquery的问题,ajax基本都同时发出去了,浏览器同时处理不了这么多请求

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

所以后面发出的请求没有处理到,但是计算timeout的计时器已经启动开始计时了,这样就造成了等待处理的时间也算进timeout里面了。这个jquery应该也没有办法解决,涉及到浏览器并发请求处理的问题了
dzdouzi 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
刚才又测试了下,应该还是针对单个的。。

用firebug看了下所有请求基本同一时间发出,然后经过指定的时间后就timetout了,应该是浏览器不能同时处理这么多ajax请求,导致后面的发送的ajax一直再等待前面的返回从而导致超时,而不是jq的timeout机制。
[/Quote]
上面的例子忘了考虑延迟机制了,在实际情况中可能是循环了100个$.ajax(),但是服务器对这100个请求有个延迟处理,所以上面的例子并不能看到效果。。 大哥,你得相信我。。。jquery确实就这德行,我还没找到解决办法
Go 旅城通票 2012-07-26
  • 打赏
  • 举报
回复
刚才又测试了下,应该还是针对单个的。。

用firebug看了下所有请求基本同一时间发出,然后经过指定的时间后就timetout了,应该是浏览器不能同时处理这么多ajax请求,导致后面的发送的ajax一直再等待前面的返回从而导致超时,而不是jq的timeout机制。
Go 旅城通票 2012-07-26
  • 打赏
  • 举报
回复
是哦。。测试后好像不是针对单个的。。这个就不清楚jq怎么搞法了。。
dzdouzi 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:

引用 3 楼 的回复:

....

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

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

for(i = 0;i<100;i++) {
$.ajax({
timeo……
[/Quote]
起初我也是这么想的,后来发现程序有问题,才知道timeout会覆盖全局设置。。所以才来这里发问的,不信你可以试一下
Go 旅城通票 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

....

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

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

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

$.ajax是针对单个ajax发起的请求吧,不是对所有的,$.ajax后,只是对当前请求的ajax对象计算timeout,后面发起的应该从0开始,而不是从第一个发起的ajax计算
dzdouzi 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

....

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

JScript code
$.ajax({
timeout:100000
/*其他配置*/
});
[/Quote]
for(i = 0;i<100;i++) {
$.ajax({
timeout:1500,
.......
});
}
比如执行一次$.ajax()需要1s,那么执行如上代码的话,后面的99次都会失败,因为timeout被覆盖成全局的,也就是过了1.5s之后,其余循环的$.ajax()也会被终止。
Go 旅城通票 2012-07-26
  • 打赏
  • 举报
回复
....

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

$.ajax({
timeout:100000
/*其他配置*/
});
dzdouzi 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

timeout (Number) : 设置请求超时时间(毫秒)。此设置将覆盖全局设置。

单独配置
[/Quote]
我就是不知道怎么单独配置。。

52,797

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 Ajax
社区管理员
  • Ajax
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧