首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >正在等待jQuery AJAX响应

正在等待jQuery AJAX响应
EN

Stack Overflow用户
提问于 2011-06-06 17:30:02
回答 3查看 25.4K关注 0票数 18

我有一个页面,使用jQuery .ajax被调用100次(async: true),问题是,当它们都被加载时,我需要系统等待所有100个调用返回,然后再继续。我该怎么做呢?

提前感谢!:)

更新:

这些调用是在for()循环中进行的(有100个这样的调用:)

EN

回答 3

Stack Overflow用户

发布于 2011-06-06 17:51:28

这类问题在数据库SQL设计中随处可见-尽管它并不完全相同-但这个问题确实会给你带来好处:网络通信。

你需要当心它,因为如果你做得不正确,它会回来咬你--也就是说,用户会非常恼火地不得不等待。这一点我怎么强调都不为过。

场景是这样的:您希望根据请求从服务器传输许多小的信息片段。每个请求都依赖于许多有效运行的因素。所有这些都不在你的控制范围之内:

Wide area Network reposnse time (anywhere in the world right?)
Locak area Network reposnse time (anywhere in the building)
WebServer Load
WebServer Response time
Database response time
Backend Script run time
Javascript run time to process the result
The fact that the browsers are generally limited to 6-8 parallel AJAX requests at once (I think - someone correct me on the exact number)

将请求数乘以(erm...in your case x 100)

明白了吗?

在本地机器上的测试中,它可能工作得很好。你甚至可以在完全相同的机器上运行你自己的数据库和webserver…但是在野外尝试一下,不久你就会遇到不可靠的问题。

听着,最简单的做法是将所有参数包装到一个JS数组中,并在一个POST请求中发送该数组。然后在服务器上执行数据库选择的所有操作,并将响应汇总到一个JSON/XML响应中。

此时,您只需要等待一个AJAX响应。您可以在JSON/XML结果中找到所有数据。

考虑到你正在处理100个请求,你也许可以用秒表来测量节省的时间!

请相信我--尽可能少地处理网络请求。

票数 4
EN

Stack Overflow用户

发布于 2011-06-06 17:36:41

您可以使用Deferred object api。只要$.ajax返回延迟对象,您就可以尝试使用以下代码使用循环:

var ajaxes = [];
for (i = 1; i < 100; i++) {
  ajaxes[i] = $.ajax({/*data*/});
}

$.when.apply( ajaxes )
   .then(function(){
      console.log( 'I fire once all ajax requests have completed!' );
   })
   .fail(function(){
      console.log( 'I fire if one or more requests failed.' );
   });

附注: Eric Hynds Using Deferreds in jQuery 1.5写了一篇关于使用延迟对象的很好的文章

票数 3
EN

Stack Overflow用户

发布于 2011-06-06 17:35:32

我不是JS专家,但我会创建一个全局变量,这将是计数器,并定义一个定时函数来定期检查这个全局变量是否达到100。

编辑: setTimeout()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6250022

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档