jquery - 等待异步ajax请求完成

标签 jquery ajax loops asynchronous

我想编写一个函数来执行十几个异步ajax请求,等待所有请求完成,然后返回聚合信息。喜欢:

function countHealthy(urls) {
  var healthy = 0;
  for (var i = 0; i < urls.length; ++i) {
    $.ajax({url: urls[i], async: true, id: i})
    .done(function (data) { ++healthy; });
  }
  // Wait for all ajax to finish.
  return healthy;
}

PS:++healthy线程安全吗?

最佳答案

Javascript 没有线程,因此线程安全不是问题。您的 return 语句是问题所在,它需要进入 ajax 调用完成时执行的回调中。由于 ajax 是异步发生的,正如您的代码所示,return 语句将在所有请求返回之前触发。

您可能想查看query deferreds ,似乎就是为这类事情而生的。直接从该链接

function doAjax() {
  return $.get('foo.htm');
}

function doMoreAjax() {
  return $.get('bar.htm');
}

$.when( doAjax(), doMoreAjax() )
  .done(function() {
    console.log( 'I fire once BOTH ajax requests have completed!' );
  })
  .fail(function() {
    console.log( 'I fire if one or more requests failed.' );
  });

通过一些小的重构,您可以在大约 2 分钟内实现此目的。

或者,如果您控制服务器,则可以创建一个服务器端点来执行一个请求中的所有检查。

关于jquery - 等待异步ajax请求完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15833347/

相关文章:

javascript - 如何根据DIV的宽度自动滚动div中的文本

javascript - json兄弟数据

javascript - Uncaught ReferenceError : jsonFlickrFeed is not defined

javascript - 通过 Ajax 调用将 Twitter 关注按钮添加到页面

c - 循环中的 fread fwrite 错误 - C

jQuery Widget,如何将 jQuery 函数作为小部件选项传递

javascript - 获取另一个 jquery 对象中 jquery 对象的索引

c - 错误: used struct type value where scalar is required for(;*ptr;ptr++)

Python - 查找第一个和最后一个白色像素坐标

jquery - JQuery Mobile Page如何添加 flex 弹跳效果?