想找一个处理success回调前的总回调.但找不到对应的api,所以写下这个扩展.如有更好的方法,希望留言共同交流.
get和post方法同上.
场景:很多的jquery ajax发出请求,成功响应后,希望先经过一个函数集中处理(比如检查是否操作有权限,如果有权限,继续调用原来的回调,没权限就不调用原来的回调).
设计:先将原来的回调保存起来,再用一个集中处理的函数覆盖原来的回调,请求成功响应后,根据需求再在这个代替的回调处理.
先定义命名空间ns和定义ajax方法:var ns = {
ajax : function(options) {
//save the old success callback
var _success = options.success;
options.success = function(data, textStatus, jqXHR) {
var auth = jqXHR.getResponseHeader("AuthReject");
if (auth == 'true') {
alert('没有权限');
} else {
_success(data, textStatus, jqXHR);
}
};
jQuery.ajax(options);
}
};
下面也可以将options.success重写:
var defaults = {
success : function(data, textStatus, jqXHR) {
var auth = jqXHR.getResponseHeader("AuthReject");
alert(auth);
if (auth == 'true') {
alert('没有权限');
} else {
_success(data, textStatus, jqXHR);
}
}
};
//merge passed options to defaults
$.extend(options,defaults);
再定义get和post方法:
jQuery.each( [ "get", "post" ], function( i, method ) {
ns[ method ] = function( url, data, callback, type ) {
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = undefined;
}
return ns.ajax({
url: url,
type: method,
dataType: type,
data: data,
success: callback
});
};
});
以后使用ns.ajax,ns.get,ns.post去发请求,成功响应后都会经过那个代替的回调先处理.不想经过那个代替的回调,就用$.ajax,$.get,$.post.
查了些资料,如果服务器没权限,就返回403,回到ajax的error回调,所以同理的扩展error:
var ns = {
ajax:function(options){
var _error=options.error;
options.error = function(jqXHR, textStatus,errorThrown) {
//前置过滤器
var result = eval("(" + jqXHR.responseText + ")");
if(result.type=='nosignin'){
alert(result.msg);
};
if(typeof(_error)=='function'){
_error.apply(this, arguments);
}
};
jQuery.ajax(options);
}
};
get和post方法同上.