ajax同步请求的处理办法

来源:互联网 发布:成都英文seo外包 编辑:程序博客网 时间:2024/06/06 02:38

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捕获异常。