【问题标题】:How do I call a function *after* my ajax call functions complete? [duplicate]我如何在我的 ajax 调用函数完成后调用函数? [复制]
【发布时间】:2014-07-11 07:04:23
【问题描述】:

我正在使用 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 调用之前被调用 - 所以显然调用的顺序混淆了。有没有办法确保console.log(stuff) 行在我的get 回调之后被调用

【问题讨论】:

  • 您是否尝试过使用链接? call = $.get(URL).then(do_stuff);?

标签: javascript jquery ajax promise


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 2014-06-10
    • 1970-01-01
    • 2017-01-10
    • 2016-12-08
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多