我在这里遇到了一个小问题。在我的document.ready函数中,我定义了一个对象,该对象由三个不同的ajax调用(在document.ready中)填充。现在我想做一个
console.log(myObject);
仅当完全执行了3个异步调用时。请建议一种方法。
答案 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}}调用完成。