我有一个ajax调用,让我们说回调(b),在另一个ajax调用的回调中,让我们说回调(a)。在我的代码中(b)取决于ajax调用(a)的成功。但是,与我的预期相反,ajax调用(b)在父ajax调用(a)完成之前仍然成功完成。
的Javascript
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()?
答案 0 :(得分:2)
您的电话
ajaxA(ajaxB(1));
在调用ajaxB(1)
之前执行ajaxA
,以便为ajaxA
提供参数值。
应该是
ajaxA(ajaxB, 1);
和
function ajaxA(callback, param){
FB.api('/me', function(response) { //ajax call(a)
ajaxAdata = response.id;
callback(param); // this completes before ajax call(a) completes
}
}
答案 1 :(得分:2)
应该是:
ajaxA(function() {ajaxB(1);} );
您首先调用ajaxB()
,并将其返回值(undefined
)作为callback
参数传递给ajaxA()
。您希望传递一个调用ajaxB()
作为回调的函数。
答案 2 :(得分:1)
您正在此处执行ajaxB:
ajaxB(1)
我认为您要做的是从ajaxB
返回一个函数,或者找到一种方法将isPublic
标志传递给您的ajaxA函数,如:
ajaxA(ajaxB, 1);
function ajaxA(callback, isPublic){
FB.api('/me', function(response) { //ajax call(a)
ajaxAdata = response.id;
callback(isPublic); // this completes before ajax call(a) completes
}
}
答案 3 :(得分:1)
ajaxA(ajaxB(1));
实际执行ajaxB ,,然后使用结果作为参数传递给ajaxA。
你需要传递函数,而不是结果。
所以试试
ajaxA(ajaxB);
然后,在ajaxA中,使用
将参数传递给回调callback(1);