我想全局处理401错误,只在本地处理其他错误。本地意味着在AJAX调用的fail处理程序内部。为此,我在document上实现了一个ajaxError处理程序。然而,问题是本地fail处理程序在全局处理程序之前被触发。因此全局处理程序中的event.stopImmediatePropagation()是无用的。我怎样才能让全局的先启动,从而阻止本地的启动呢,谢谢。
401
fail
document
ajaxError
event.stopImmediatePropagation()
mhd8tkvw1#
对于任何寻找这种解决方案的人来说,现在可以使用jQuery的$.ajaxPrefilter函数来全局拦截特定的错误,并防止AJAX调用的fail处理程序因该错误而被执行。只需将Ajax调用中的原始Deferred对象替换为我们自己的对象:
$.ajaxPrefilter
Deferred
$.ajaxPrefilter(function (options, originalOptions, jqXHR) { options.error = $.noop(); var dfd = $.Deferred(); jqXHR.done(dfd.resolve); jqXHR.fail(function () { if (jqXHR.status == 401) { // Handle the 401 error globally here } else { if (originalOptions.error) { dfd.fail(originalOptions.error); } dfd.rejectWith(jqXHR, Array.from(arguments)); } }); return dfd.promise(jqXHR); });
字符串
lrl1mhuk2#
var statusCodeError = function(error) { throw new Error('--> Error code ' + error.status + ' on XMLHttpRequest'); }; var settings = { type : 'POST', url : '/ajax-script.php', dataType : 'json', context : document.body, statusCode : { 404: statusCodeError, 301: statusCodeError, 302: statusCodeError, 401: statusCodeError, 500: statusCodeError }, failure : statusCodeError }; $.ajaxSetup(settings);
2条答案
按热度按时间mhd8tkvw1#
对于任何寻找这种解决方案的人来说,现在可以使用jQuery的
$.ajaxPrefilter
函数来全局拦截特定的错误,并防止AJAX调用的fail
处理程序因该错误而被执行。只需将Ajax调用中的原始Deferred
对象替换为我们自己的对象:字符串
lrl1mhuk2#
字符串