ajax请求通常以异步的形式发起的,但如果有两个请求A、B,B需在A成功返回时才进行,该怎么写?个人实践出个办法,看代码:
var ws = {
//ajax是对jquery的ajax作薄层封装,以简化代码
//uri:请求链接
//method: 请求方法
//token: 身价凭证,可忽略
//data: 发送的数据
//async: true表示异步请求,false为同步请求
//callback: 回调处理
ajax:function(uri,method,token,data,async,callback){
$.ajax({
url: uri,
type: method || 'GET',
data: data,
async: async,
beforeSend:function(xhr){
if(!token){
return;
}
xhr.setRequestHeader('Authorization', 'Bearer '+token);
},
success: function(data) {
data = JSON.parse(data);
if(callback !=null && typeof callback == 'function'){
callback(data);//特殊处理
}else{//通用处理
if(data.status_code == '200'){
alert("成功");
}else{
alert(data.msg);
}
}
}
});
},
init:function(){//请求A
var data = {
//你的数据
...
};
var url="你的url";
var flag = true;//标识返回结果是否正常
this.ajax(url,'POST',null,data,false,function(data){
if(data.status_code != '200'){//未能正确返回数据
alert(data.msg);
flag = false;
return;
}
});
if(!flag){
throw new Error("初始化失败");//未能正确返回数据就抛异常,关键地方
}
},
play:function(){//请求B
//如果init有异常就不执行请求
try{
this.init();
}catch(error){
return;
}
var url = '你的url';
var data = {
//你的数据
...
};
this.ajax(url,'POST',null,data,true,null);
}
//其他方法已省略
};
init方法发同步请求,play方法里调用init,如果init正确返回才发起另一个ajax请求,重点在于init同步请求并抛异常,play捕获异常。