如何使用错误回调的自定义实现覆盖jQuery ajax函数
我想用错误回调的自定义实现覆盖jQuery ajax函数,以便在出现某些特定错误时,调用不会转移到ajax调用的错误块。如何使用错误回调的自定义实现覆盖jQuery ajax函数,jquery,ajax,Jquery,Ajax,我想用错误回调的自定义实现覆盖jQuery ajax函数,以便在出现某些特定错误时,调用不会转移到ajax调用的错误块。 我想做的是,在自定义实现中,我将检查状态,如果它匹配,我将不调用原始错误处理程序。jQuery有覆盖全局ajax处理程序的方法。例如,如果要响应自定义错误代码,可以覆盖ajaxComplete,检查状态,并调用自定义错误处理程序或默认错误处理程序 或者重写ajaxError并执行您自己的错误处理逻辑: 我希望这有帮助 如果有任何服务器端错误,控件肯定会转到错误回调。在这个
我想做的是,在自定义实现中,我将检查状态,如果它匹配,我将不调用原始错误处理程序。jQuery有覆盖全局ajax处理程序的方法。例如,如果要响应自定义错误代码,可以覆盖ajaxComplete,检查状态,并调用自定义错误处理程序或默认错误处理程序 或者重写ajaxError并执行您自己的错误处理逻辑:
我希望这有帮助 如果有任何服务器端错误,控件肯定会转到错误回调。在这个场景中,您可以根据自己的意愿过滤要执行的操作
$.ajax({
error:function(jqXHR, textStatus, errorThrown){
if(errorThrown == "specificErrorYouLookingFor"){
// Do the special error handling you wish to do.
}else{
// Do normal error handling.
}
}
})
如果要为所有将来的Ajax请求设置errorHandler,请参阅
ajaxSetup
$.ajaxSetup({
error: function(event, jqXHR, ajaxSettings, thrownError) {
// this callback called always on all ajax request errors
}
});
或者,如果您想只打一次电话:
$.ajax({
// similar
error: function(event, jqXHR, ajaxSettings, thrownError) {
}
});
找到了答案
(function($){
// Save reference to actual jQuery ajax function
var $_ajax = $.ajax;
$.ajax = function(options){
if (options.error) {
// save reference to original error callback
var originalErrorHandler = options.error;
var errorHandlerContext = options.context ? options.context : $;
// define a custom error callback
var customErrorHandler = function(xhr,status,error) {
if(error != 'Some error'){
// call original error callback
originalErrorHandler.apply(errorHandlerContext, arguments);
}
};
// override error callback with custom implementation
options.error = customErrorHandler;
};
// call original ajax function with modified arguments
$_ajax.apply($, arguments);
};
})(jQuery);
今天我遇到了这个问题,我决定改进@Varun的答案,以处理消费者使用延迟来设置错误处理程序而不是回调的情况。以下是我处理这两种情况的方法:
var oldAjax = $.ajax;
var newAjax = function (options) {
var originalErrorHandler = options.error;
var errorHandlerContext = options.context ? options.context : $;
var customErrorHandler = function (xhr, status, error) {
if (xhr.status === 401) {
//do something
}
else if (xhr.status === 403) {
//do something
}
else {
if (originalErrorHandler) {
originalErrorHandler.apply(errorHandlerContext, arguments);
}
}
};
if (options.error) {
options.error = customErrorHandler;
};
var deferred = oldAjax.apply($, arguments).error(customErrorHandler);
var addErrorHandler = deferred.error;
deferred.error = function (localHandler) {
var newLocalHandler = function (xhr) {
if (xhr.status !== 401 && xhr.status !== 403) {
localHandler.apply(localHandler, arguments);
}
};
addErrorHandler.call(addErrorHandler, newLocalHandler);
return deferred;
};
return deferred;
};
$.ajax = newAjax;