我们在使用jquery的ajax方法时通常并不会直接去用ajax方法,而是会对它进行封装一下,好处是可以统一处理一些事件。如统一加载提示,统一报错提示,统一请求路径路由等,总之好处多多。
重写原理就是先备份ajax方法,然后覆盖ajax方法。
//先备份jquery的ajax
var _a=$.ajax;
//重写ajax方法
$.ajax=function(ops){
//备份用户传入的参数
//就是调用方自己定义的error success的方法
var userFunction = {
error:function(XMLHttpRequest, textStatus, errorThrown){},
success:function(data, textStatus){}
};
//如果调用方传入了执行成功的回调方法,那么保存一个备份,等待后面执行
if(ops.success && typeof(ops.success)!=undefined){
userFunction.success=ops.success;
}
//如果调用方传入了执行成功的回调方法,那么保存一个备份
if(ops.error && typeof(ops.error)!=undefined){
userFunction.error=ops.error;
}
//统一ajax请求的路径
ops.url="https://www.itxst.com/?ajax="+ops.url;
//每次发送ajax请求都必须带上token
if(ops.data && typeof(ops.data)!=undefined){
ops.data.token="123";
}
//合并用户传入的参数和我们要统一处理的方法
var _ops = $.extend(ops,{
error:function(XMLHttpRequest, textStatus, errorThrown){
//统一报错提示
userFunction.error(XMLHttpRequest, textStatus, errorThrown);
},
success:function(data, textStatus){
//统一执行成功后处理
userFunction.success(data, textStatus);
},
beforeSend:function(xhr){
//统一带上标识
xhr.setRequestHeader('userid',"itxst");
}
});
//合并好后执行ajax请求
return _a(_ops);
};