有没有办法让jquery的ajaxError在第一个ajax请求失败后停止运行?

时间:2019-01-08 10:33:54

标签: javascript jquery ajax sweetalert2

场景:我有一个Web应用程序,可以发出各种ajax请求。其中一些是由于用户互动而发生的(例如,单击表内的一行,该表会运行ajax请求以更新该行内的更多详细信息)。其他则是“后台任务”(例如,检查是否有新的下载可用)。

用户必须登录我的应用程序才能执行任何功能;因此,如果用户注销,任何ajax请求都将失败。

所以ajax请求可能是这样的:

  • /click-table-row
  • /check-downloads
  • /some-other-functionality
  • ...

我已将以下内容添加到全局.js文件中:

$(function() {

$( document ).ajaxError(function() {
    swal({
        position: 'top-end',
        toast: true,
        title: 'Network error',
        html: 'Please try again. If problem persists please login again.',
        type: 'error',
        confirmButtonText: 'Close'
    });
});

});

这是使用SweetAlertswal)来显示消息,如果通过使用jquery的ajaxError导致任何ajax请求失败。

如果我模拟ajax请求失败-通过在单独的浏览器选项卡中运行我的注销脚本-然后让应用程序发出ajax请求,则每次发出ajax请求时,它都会在ajaxError内部执行代码(可能是尝试运行的后台任务,或者是试图与应用程序进行交互的用户)。例如,如果有3个请求(如问题顶部的列表所示),它将执行swal代码3次。我认为这在技术上是正确的,因为3个Ajax请求确实失败了。

我要尝试的是一种实现方法:“如果第一个ajax请求失败,请再次停止在ajaxError()内部运行代码”。

我不知道这是否或如何实现?请有人指教。

jquery 3.2.1,SweetAlert 2

1 个答案:

答案 0 :(得分:0)

检查StatusCode => 401

$(document).ajaxError(function(e, xhr) {
if(xhr.status===401)
    {
    swal({
         position: 'top-end',
         toast: true,
         title: 'Network error',
         html: 'Please try again. If problem persists please login again.',
         type: 'error',
         confirmButtonText: 'Close'
        });
    }

});