如何一次执行几个Ajax请求

时间:2010-11-21 22:43:28

标签: javascript jquery

我不确定它在JavaScript中是否可行,所以我想我会问。 :)

假设我们有100个要求要完成并希望加快速度。

我在想的是:

      
  • 创建一个将启动前5个ajax调用的循环
  •   
  • 等到它们全部返回(成功 - 调用函数来更新dom /错误) - 不确定如何使用全局计数器?
  •   
  • 重复直到所有请求都完成。
  •  

考虑到浏览器JavaScript不支持线程,我们可以“利用”async功能吗? 你认为它会起作用,或者在JavaScript中存在固有的问题吗?

3 个答案:

答案 0 :(得分:3)

是的,我之前做过类似的事情。基本过程是:

  1. 创建一个堆栈来存储您的作业(在这种情况下是请求)。
  2. 首先执行3或4个请求。
  3. 在请求的回调中,将下一个作业弹出堆栈并执行它(给它提供相同的回调)。

答案 1 :(得分:2)

我会说,Dancrumb的评论是这个问题的“答案”,但不管怎样......

当前的浏览器会限制HTTP请求,因此您甚至可以轻松地立即启动所有100个请求,并且浏览器将尽可能快地发送这些请求,但仅限于相当数量的并行请求。

所以,立即启动它们并信任浏览器。

但是,这可能会在未来发生变化(随着最终用户互联网带宽的增加和技术的进步,浏览器发送的并行请求数量会增加。)

编辑:您还应该在javascript环境中思考和阅读“异步”的含义。异步这里只是意味着您放弃控制关于某事情系统的其他部分。所以“发送”异步请求只是意味着你告诉浏览器这样做!您无法控制浏览器,只需告诉发送该请求,并通知我结果

答案 2 :(得分:0)

分解100个请求实际上要慢一点,并且在等待它们完成直到您发送下一批请求时,一次批量发送5个请求。你可能最好只发送100个请求,记住JavaScript是单线程的,所以它一次只能解决1个响应。

更好的方法是设置一个批处理请求服务,它接受如下内容:

/ajax_batch?req1=/some/request.json&req2=/other/request.json

等等。基本上,您在单个HTTP请求中发送多个请求。这样的请求的响应如下:

[
   {"reqName":"req1","data":{}},
   {"reqName":"req2","data":{}}
]

您的ajax_batch服务将解析每个请求并以正确的顺序发回结果。客户端,您可以跟踪发送的内容和期望的内容,以便将结果与正确的请求进行匹配。在下行方面,它需要相当多的编码。

速度增益完全来自HTTP请求的大量减少。 由于网址长度有限制,因此您发送的请求数量有限制。

DWR确实完成了这一点。