我有一个ajax调用,例如回调(b),在另一个ajax调用的回调中,例如回调(a)。在我的代码中(b)取决于ajax调用(a)的成功。但是,与我的预期相反,ajax调用(b)仍在父ajax调用(a)完成之前成功完成。
Java脚本
var ajaxAdata; //global
ajaxA(ajaxB(1));
function ajaxA(callback){
FB.api('/me', function(response) { //ajax call(a)
ajaxAdata = response.id;
callback(); // this completes before ajax call(a) completes
}
}
ajaxB = function(isPublic) {
.getJSON(){ //ajax call (b)
console.log(ajaxAdata); // necessary ajaxAdata returns undefined
}
}
我是否在这里不了解JavaScript?我在很多地方都读到,回调函数是处理异步调用的正确方法。在这种情况下,javascript是否仍会提前读入ajaxB函数并在FB.api()调用完成之前开始执行.getJSON()?
最佳答案
ajaxA(ajaxB(1));
实际上是在执行ajaxB,然后使用结果作为参数传递给ajaxA。
您需要传递函数,而不是结果。
所以尝试
ajaxA(ajaxB);
然后,在ajaxA中,将您的参数传递给回调
callback(1);