Wrap jQuery's $.ajax() method to define global error handling
从这类问题的分支中,我希望包装jquery的$.Ajax()方法,以便在一个位置提供错误处理,然后应用程序的所有远程调用都将自动使用它。
简单的方法是简单地创建一个新名称,类似于$.get()和$.post()如何实现$.ajax()的外观。不过,我希望重用名称$.ajax(),这样我们就可以使用标准jquery语法保留其余代码,从而避免了添加了自己的错误处理这一事实。这是可行的和/或很好的实现,还是可能是一个可怕的想法?
编辑:到目前为止的响应表明.ajaxerror()是前进的道路。我知道这将捕获400和500个级别的错误,但是否有一种方法(使用此事件处理程序或其他方法)也捕获302个重定向?我正在尝试处理重定向到登录页面的响应,但我们希望截获当它是XHR请求时的重定向,允许用户取消操作,而不是强制它们自动转发。
你可能想看看
1 2 3 | $(document).ajaxError(function myErrorHandler(event, xhr, ajaxOptions, thrownError) { alert("There was an ajax error!"); }); |
jquery提供了一系列附加全局处理程序的其他方法。
要回答您的编辑,您可以使用
1 2 3 | $(document).ajaxComplete(function myErrorHandler(event, xhr, ajaxOptions, thrownError) { alert("Ajax request completed with response code" + xhr.status); }); |
jquery有一个名为$.Ajaxsetup()的简便方法,它允许您设置应用于随后所有基于jquery的Ajax请求的选项。通过将此方法放置在主文档就绪功能中,所有设置都将自动应用于其他功能,并位于一个位置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | $(function () { //setup ajax error handling $.ajaxSetup({ error: function (x, status, error) { if (x.status == 403) { alert("Sorry, your session has expired. Please login again to continue"); window.location.href ="/Account/Login"; } else { alert("An error occurred:" + status +"nError:" + error); } } }); }); |
参考:https://cypressnorth.com/programming/global-ajax-error-handling-with-jquery/
实际上,jquery仅为此目的提供了hook,
要使用它来处理页面上的所有Ajax请求错误,并使用
1 2 3 | $(document).ajaxError(function(event, request, settings){ alert("Error requesting page:" + settings.url); }); |
我觉得这是个坏主意。我认为包装
正如其他人提到的,将一个处理程序绑定到