包装jQuery的$ .ajax()方法来定义全局错误处理

Mar*_*c L 21 ajax jquery custom-exceptions

妖异问题,如这一次,我在找换行jQuery的$.阿贾克斯()方法,这样我可以在一个位置,它就会按照所有应用程序的远程调用自动使用提供错误处理.

简单的方法是简单地创建一个新名称,类似于$ .get()和$ .post()如何实现$ .ajax()的外观.但是,我希望重用名称$ .ajax(),以便我们可以使用标准的jQuery语法保留其余的代码,从中隐藏我们添加了自己的错误处理的事实.这是实际的和/或好的实现,或者可能是一个可怕的想法?

编辑:到目前为止的响应表明.ajaxError()是要走的路.我知道这会捕获400和500级错误,但有没有办法(使用此事件处理程序或其他方式)捕获302重定向?我正在尝试处理重定向到登录页面的响应,但我们希望在它是XHR请求时拦截该重定向,允许用户取消操作而不是强制它们自动转发.

sje*_*397 27

你可能想看一下$.ajaxError.

$(document).ajaxError(function myErrorHandler(event, xhr, ajaxOptions, thrownError) {
  alert("There was an ajax error!");
});
Run Code Online (Sandbox Code Playgroud)

jQuery提供了许多其他方法来附加全局处理程序.

要回答您的编辑,您可以捕获成功的ajax请求$.ajaxSuccess,并且您可以捕获所有(成功和失败)$.ajaxComplete.您可以从xhr参数中获取响应代码,例如

$(document).ajaxComplete(function myErrorHandler(event, xhr, ajaxOptions, thrownError) {
  alert("Ajax request completed with response code " + xhr.status);
});
Run Code Online (Sandbox Code Playgroud)

  • 试试`$(document).ajaxError(...);` - 使用`$ .ajaxError(...)`对我来说不起作用. (3认同)