Javascript 循环中的所有AJAX请求完成后,如何执行回调?
我有一个循环,循环遍历HTML元素数组。每次迭代都会发出一个GET请求(其url取决于当前元素)并进行一些额外的处理。如果我想发出所有请求都已完成的信号,我会怎么做 HTML元素的格式如下所示Javascript 循环中的所有AJAX请求完成后,如何执行回调?,javascript,jquery,ajax,callback,Javascript,Jquery,Ajax,Callback,我有一个循环,循环遍历HTML元素数组。每次迭代都会发出一个GET请求(其url取决于当前元素)并进行一些额外的处理。如果我想发出所有请求都已完成的信号,我会怎么做 HTML元素的格式如下所示 <td align="left">Item name</td> 项目名称 以下是我所拥有的: var url = "http://example.com/page.phtml?item="; var items = $(itemList).find('table tbody t
<td align="left">Item name</td>
项目名称
以下是我所拥有的:
var url = "http://example.com/page.phtml?item=";
var items = $(itemList).find('table tbody tr td[align=left]');
for (var i = 0; i < items.length; i++) {
(function (i) {
var itemName = items[i].innerHTML;
$.get(url + itemName, function(data) {
// process some stuff
console.log("Processing item " + itemName);
});
})(i);
}
var url=”http://example.com/page.phtml?item=";
var items=$(itemList.find('table tbody tr td[align=left]');
对于(变量i=0;i
如您所见,发出GET调用的函数位于闭包中。所有请求完成后,如何使用回调,如
console.log(“DONE”)
?您可以使用jQuery的$。when()
:
您累积一个承诺数组(这是从$.get()
)返回的内容),然后将该承诺数组传递给$。when()
,它将创建一个摘要承诺,当所有其他承诺都已解决时,该摘要承诺将得到解决。您有两个选项。
简单的方法是在回调处理程序中保持计数,然后仅在回调次数等于数组中的项数后执行后续代码
更昂贵但更有价值的是使用承诺。有大量的LIB用于使用承诺。如果你决定走这条路,我建议你寻找一个.all或.when函数,它可以处理一系列承诺 这说明了你的第一个选择。
var url = "http://example.com/page.phtml?item=";
var items = $(itemList).find('table tbody tr td[align=left]');
var promises = items.map(function(i, elem) {
var itemName = items[i].innerHTML;
return $.get(url + itemName, function(data) {
// process some stuff
console.log("Processing item " + itemName);
});
}).get();
$.when.apply($, promises).done(function() {
// all promises done here
});