我想编写一个函数来执行十几个异步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/