在Javascript中处理异步调用

时间:2011-04-15 15:46:22

标签: javascript ajax

我在这里遇到了一个小问题。在我的document.ready函数中,我定义了一个对象,该对象由三个不同的ajax调用(在document.ready中)填充。现在我想做一个

 console.log(myObject);

仅当完全执行了3个异步调用时。请建议一种方法。

2 个答案:

答案 0 :(得分:3)

使用我建议你创建一个这样的函数:

function onAllInformationIsReady() {
        console.log(myObject);
    }

function isAllInformationReady() {
    // verify here if you have all the information
}

你在你的ajax调用上做了类似的事情(我不假设你在这里使用jQuery,用你的ajax调用方法替换)

$.ajax({
    type: "POST",
    url: "some.php",
    data: "...n",
    success: function(msg){

     if(isAllInformationReady())
        onAllInformationIsReady();

    }
});

顺便说一下,如果你使用的是jQuery,你可以像这样进行同步ajax调用:

$.ajax({
        type: "POST",
        url: "some.php",
        data: "...n",
        async: false,
        success: function(msg){

        }
    });

答案 1 :(得分:3)

尝试使用jQuery 1.5的新“deferred”对象:

var j1 = $.ajax(...);
var j2 = $.ajax(...);
var j3 = $.ajax(...);

j1.success(function(data) {
    // do something with data
});

j2.success(function(data) {
    // do something with data
});

j3.success(function(data) {
    // do something with data
});

$.when(j1, j2, j3).done(function() {
    console.log(myObject);
});

三个.success()函数将异步调用并填充myObject,然后done函数只有$.when()一旦所有三个AJAX请求都被{{1}}调用完成。