微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – 如何在循环中的所有AJAX请求完成后执行回调?

我有一个循环遍历一系列 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);
}

如您所见,进行GET调用函数位于闭包中.完成所有请求后,如何使用console.log(“DONE”)之类的回调?

解决方法

@H_502_24@ 你可以使用jQuery的$.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
});

你积累了一个promises数组(这是从$.get()返回的),然后将这个promises数组传递给$.when(),它创建了一个汇总promise,当所有其他promise都被解析时解析.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐