基于ajax再封装

来源:互联网 发布:linux挂载文件夹到mnt 编辑:程序博客网 时间:2024/06/05 22:42

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.csdn.net/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    },}