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
},
}