这文章的题目还真是有点绕啊,其实问题是这样的,我在一个Ajax(A)的回调函数里要做一件事情,但是在做它之前,还有一个Ajax(B)处理,我必须要在B的回调函数处理完成之后再进行A里面的那个操作。不知道这样说大家明白没有。
我最后的处理方法是这样的,设一个全局变量,如果B里的回调函数处理完就将它设为True。然后在A的回调函数里面将要处理的代码,重构成一个公共函数,切勿不能放在A的回调函数里面,然后在里面调用一下。在这个公共函数里面用一个if判断前面的那个全局变量,如果为true则执行真正的代码,false的话就用setTimeout,做个延迟调用。
写个小Demo备忘一下:
var flag = false; //第一个Ajax var ajax_a_ret = Ajax(path,request,_callbacka); function _callbacka(){ B(); } //真正需要执行的内容 function _do(){ if(flag){ //I need to do ... }else{ setTimeout("_do()",1000);//这里的时间最好根据你Ajax请求的估算时间动态调整下,尽量减少这个的循环执行次数 } } //第二个Ajax function B(){ var ajax_b_ret = Ajax(path,request,_callbackb); function _callbackb(){ //do somthing.. flag = true; } }