Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/447.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 循环中的所有AJAX请求完成后,如何执行回调?_Javascript_Jquery_Ajax_Callback - Fatal编程技术网

Javascript 循环中的所有AJAX请求完成后,如何执行回调?

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

我有一个循环,循环遍历HTML元素数组。每次迭代都会发出一个GET请求(其url取决于当前元素)并进行一些额外的处理。如果我想发出所有请求都已完成的信号,我会怎么做

HTML元素的格式如下所示

<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
});