我有一个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);

10-06 13:57