分支出类似这样的问题,我希望包装jQuery的$.ajax()方法,以便可以在一个位置提供错误处理,然后该错误将由应用程序的所有远程调用自动使用。
简单的方法是简单地创建一个新名称,类似于$ .get()和$ .post()如何将外观实现为$ .ajax()。但是,我希望重用名称$.ajax(),以便我们可以使用标准jQuery语法保留其余代码,而隐藏了我们添加了自己的错误处理的事实。这是可行的和/或好的实现,还是一个可怕的想法?
编辑:到目前为止的响应表明.ajaxError()是要走的路。我知道这将捕获400和500级错误,但是有没有办法(使用此事件处理程序或其他方式)捕获302重定向?我正在尝试处理重定向到登录页面的响应,但是我们希望在它是XHR请求时拦截该重定向,从而允许用户取消操作而不是强制其自动转发。
您可能想看看$.ajaxError。
$.ajaxError
$(document).ajaxError(function myErrorHandler(event, xhr, ajaxOptions, thrownError) { alert("There was an ajax error!"); });
jQuery提供了许多其他方式来附加全局处理程序。
要回答您的编辑,您可以使用捕获成功的ajax请求$.ajaxSuccess,并使用捕获所有(成功和失败的)请求$.ajaxComplete。您可以从xhr参数获取响应代码,例如
$.ajaxSuccess
$.ajaxComplete
xhr
$(document).ajaxComplete(function myErrorHandler(event, xhr, ajaxOptions, thrownError) { alert("Ajax request completed with response code " + xhr.status); });