jquery ajax 循环执行请求

lzfrab 2011-04-15 11:18:33
过程:
1、循环ID串
2、ID作为参数,异步请求
3、每请求后,返回结果就是一段HTML,追加到页面某个位置

比如我ID串的ID为10个,那么就会有10次异步请求
我在请求前记录时间,请求完成后记录时间,然后两者相减,发现时间间隔慢慢递增
前台记录如
日志信息:模块:图片新闻,开始时间:1302835459050 | 结束时间:1302835463158 | 间隔4108 | 序号1
日志信息:模块:通知公告,开始时间:1302835459065 | 结束时间:1302835463424 | 间隔4359 | 序号2
日志信息:模块:收文归档,开始时间:1302835459081 | 结束时间:1302835464690 | 间隔5609 | 序号3
日志信息:模块:待办数量,开始时间:1302835459096 | 结束时间:1302835465174 | 间隔6078 | 序号4
......

同时我在服务器端也记录(Load2,0,1..代表某个页面)
日志信息:模块的客户端ID:4D6C7DF7-AC7C-AA61-2A5C-638C00D23781 | 开始时间:10:42:52 921 | 结束时间:10:42:53 390 | 间隔:468.75 Load2
日志信息:模块的客户端ID:76290F73-C7D5-7FE4-BCC9-F6D0D1063CDB | 开始时间:10:42:53 406 | 结束时间:10:42:53 875 | 间隔:468.75 Load0
日志信息:模块的客户端ID:8641CD4B-7A33-C789-5865-3CC13C0B9AD6 | 开始时间:10:42:53 921 | 结束时间:10:42:54 734 | 间隔:812.5 Load1
....

从服务器记录看,后面的开始时间肯定会大于前一条的结束时间
这样说明虽然是异步请求,但是也需要等前一次请求完成然后再执行
同时也印证了客户端的记录间隔,虽然开始时间都差不太多,但是间隔却慢慢递增,而且会越来越大。

请问,这内部的机制是?以及有什么办法可以解决吗?与IIS有关吗?
因为如果我加载的模块越多,那么后面的模块会等待越来越久,才会显示。

谢谢大家!

...全文
891 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzfrab 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 anlige 的回复:]
这样的我通常用的方法是类似于递归,只有上次请求结束才进行下一次的请求,测试过几十W数据没问题的
写个简单例子。。
var ary=[1,2,3,4,5];
var currentIndex=0;
newRequest();
function newRequest(){
if(currentIndex>=ary.length){alert('over');return;}
Aja……
[/Quote]

谢谢~~

页面上异步加载模块,不能这样等成功后再去请求的。
但是是不是即使我不等成功后就去请求,
是不是也相当于要等请求完成后,才会完成接下来的请求,也就好似队列一样?
有其他方法可以解决吗?
lzfrab 2011-04-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hookee 的回复:]
浏览器对统一域名下的http连接有限制,不光是针对ajax。
对于加载模块,看上去似乎用Ajax作用不大, 用内容缓存似乎更合适.
[/Quote]

那意思异步加载模块,实际中它还是一个接一个的完成吗,就像是队列?
不用内容缓存,有其他方法可以解决吗?因为有情况下,模块是可以随时编辑、移动、删除的。
谢谢!
Anlige 2011-04-16
  • 打赏
  • 举报
回复
这样的我通常用的方法是类似于递归,只有上次请求结束才进行下一次的请求,测试过几十W数据没问题的
写个简单例子。。
var ary=[1,2,3,4,5];
var currentIndex=0;
newRequest();
function newRequest(){
if(currentIndex>=ary.length){alert('over');return;}
Ajax({
url:'your url.asp?id='+ary[currentIndex],
succeed:function(){
currentIndex++;
newRequest();//这里也可以加个timeOut来延时
}
});
}
KK3K2005 2011-04-15
  • 打赏
  • 举报
回复
http只能同时出2个连接吧



你已经知道 要加载多少模块了 而且你是同时发出请求
所以 证明你不需要 排队获取模块数据
那么可以一次请求吧所有的模块数据全要过来吧

hookee 2011-04-15
  • 打赏
  • 举报
回复
浏览器对统一域名下的http连接有限制,不光是针对ajax。
对于加载模块,看上去似乎用Ajax作用不大, 用内容缓存似乎更合适.

52,797

社区成员

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

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