等待AJAX​​在$ .each循环内完成

时间:2014-01-28 00:49:57

标签: jquery jquery-deferred

如果从$.each循环调用jQuery deferrers,我似乎无法工作。

var deferreds = [],
    ids = ['1234', '4321'],
    users = [];

$.each(ids, function(i,v){
    deferreds.push(
        $.getJSON('api/users/'+v, function(i,v){
            users.push(v.username);
        })
    );
});

$.when($, deferreds).done(function(){
    console.log(users);
});

2 个答案:

答案 0 :(得分:3)

问题在于使用when

特别是,用法缺少apply - 因此它“等待”$和延迟数组(将立即“解析”),而不是每个延迟。

与:比较:

$.when.apply($, deferreds).done..

答案 1 :(得分:0)

我想我会在每个循环中关于ajax调用的非常类似的线程上链接到我的答案here

与OP的代码不同,这种方法稍微复杂一点,显示了如何等待“成功”。通过几个函数调用备份,我认为对于遇到ajax /每个问题的许多人都有用。