代码改变世界

关于解决一个等待异步传输情况下回调处理的问题

2009-05-22 17:41  ︶ㄣ木べ头  阅读(286)  评论(0编辑  收藏  举报

来源于:http://gaby.cnblogs.com/

作者:Gaby,昵称:木头

说明:本人能力有限,所有文章均作为自己的学习笔记,如果不对或者不合理的地方, 欢迎留言提出,谢谢支持!

      这文章的题目还真是有点绕啊,其实问题是这样的,我在一个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;
	}

}