基于ajax再封装

ajax再封装

针对项目中简化ajax代码以及处理异常,对ajax再封装。
1.实现ajax提交,参数缺省
2.实现自定义参数opt的对ajax参数的继承覆盖
3.实现服务器返回的数据类型标准性

      var sesxhAjax = {
    // 请求返回值为json格式
    AjaxToDo:function(url,para,callback){
        var arr = getParam(arguments[3],arguments[4],arguments[5]);
        var async = arr[0];
        var fault= arr[1];
        var Option= arr[2];
        var settings = {
            url: url,
            contentType: "application/x-www-form-urlencoded;charset=UTF-8",
            type: "POST",
            data: para,
            async:async,
            success: function(d){
                if(d[sesxhCode.statusCode.statusKey]==sesxhCode.statusCode.success){
                    callback(d);
                }else{
                    if(fault !=""){
                        fault(d);
                    }else{
                        errorMsg(d[sesxhCode.statusCode.statusValue]);
                    }
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                alert("请求的url出错,请检查!"+url);
            }
        }
        if(typeof Option === 'object'){
            jQuery.extend(settings, Option);
        }
        $.ajax(settings);
    },

    // 请求返回值为page
    AjaxHtmlToDo:function(url,para,callback){
        var arr = getParam(arguments[3],arguments[4],arguments[5]);
        var async = arr[0];
        var fault= arr[1];
        var Option= arr[2];
        var settings = {
            url: url,
            contentType: "application/x-www-form-urlencoded;charset=UTF-8",
            type: "POST",
            data: para,
            async:async,
            success: function(d){
                var flag = isJSON(d);
                if(flag){
                    if(fault !=""){
                        fault(d);
                    }else{
                        errorMsg(d[sesxhCode.statusCode.statusValue])
                    }
                }else{
                    callback(d);
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown){
                alert("请求的url出错,请检查!"+url);
            }
        }
        if(typeof Option === 'object'){
            jQuery.extend(settings, Option);
        }
        $.ajax(settings);
    }
};
function errorMsg(title){
        swal({
            title : title,
            type : "warning"
        });
    }
function isJSON(str) {
            try {
                JSON.parse(str);
                return true;
            } catch(e) {
                console.log(e);
                return false;
            }
        }
function getParam(arg3,arg4,arg5){
        var async = true;
        var fault ="";
        var Option ="";
        var a3= arg3 || "";
        var a4= arg4 || "";
        var a5= arg5 || "";
        var arr=[a3,a4,a5];
        for(var i =0;i<arr.length;i++){
            if(typeof arr[i] == 'boolean'){
                async = arr[i];
            }else if(typeof arr[i] == 'object'){
                Option = arr[i];
            }else if(typeof arr[i] == 'function'){
                fault = arr[i];
            }
        }
        var newarr = [async,fault,Option];
        return newarr;
}
    //http://www.jb51.net/article/45365.htm,
    //http://blog.youkuaiyun.com/nohero1/article/details/41517163
    //执行匿名函数,$.ajax,入参为jquery对象
    (function($){     
       //备份jquery的ajax方法     
       var _ajax=$.ajax;     
       //jquery的ajax方法     
       $.ajax=function(opt){     
           //备份opt中error和success方法     
           var fn = {     
               error:function(XMLHttpRequest, textStatus, errorThrown){},     
                success:function(data, textStatus){}     
            }     
            if(opt.error){     
                fn.error=opt.error;     
            }     
            if(opt.success){     
                fn.success=opt.success;     
            }     

            //扩展error和success方法     
            var _opt = $.extend(opt,{
                error:function(XMLHttpRequest, textStatus, errorThrown){
                    //错误方法增强处理
                    //TODO
                    console.log("【错误类型】:"+XMLHttpRequest.status+"-----【状态码】:"+XMLHttpRequest.readyState+"------【错误信息】:"+textStatus);
                    fn.error(XMLHttpRequest, textStatus, errorThrown);
                },
                success:function(data, textStatus){
                    //成功回调方法增强处理
                    //TODO
                    //data...
                    fn.success(data, textStatus);
                }

            }); 
            return _ajax(_opt);     
        };     
    })(jQuery); 


----------------------------code对照表----------------------------
    var sesxhCode = {
    statusCode: {
        success: 000,//成功状态码
        statusKey: "statusKey",//状态码 key
        statusValue:"statusValue", //状态码内容  key
    },
}   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值