我如何调用一个函数后,我的ajax调用函数完成

How do I call a function *after* my ajax call functions complete?

本文关键字:调用 函数 我的 ajax 何调用 一个      更新时间:2023-09-26

我正在使用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回调后被调用 ?

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

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

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