在我的ajax调用函数完成后如何调用函数*?

时间:2014-07-10 22:25:41

标签: javascript jquery ajax promise

我使用jQuery运行一些ajax:

var stuff = {};

function do_stuff(thing){
    stuff[thing.id] = thing;
}

function fun(){
    var calls = [];

    for(var i = 0; i < 10; i++){
        var call = $.get(URL, function(data){
             do_stuff(data);
        });
        calls.push(call);
    }

    $.when(calls).done(function(){
        console.log(stuff);
    });
}

我使用的是$.when,但我获得的是{}而不是我期望的数据。当我在Chrome中设置断点时,log行会在任意do_stuff次调用之前被调用 - 显然,调用的顺序会混淆。有没有办法可以确保在我的get回调之后console.log(stuff)行被称为

1 个答案:

答案 0 :(得分:0)

您应该阅读延迟对象:http://api.jquery.com/category/deferred-object/

您使用$.when时更正,但接受延迟对象的参数。所以实际上你需要像$.when(calls[0], calls[1], ...)这样的东西。这有点麻烦,所以幸运的是可以使用javascript函数.apply并得到类似的东西:

$.when.apply(null, calls).done(function() {
    console.log(stuff);
}