Есть ли способ заставить jquery ajaxError прекратить работу после первого сбоя запроса ajax?

Сценарий: у меня есть веб-приложение, которое делает различные запросы 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'
    });
});

});

Это использует SweetAlert (swal) для отображения сообщения, если какой-либо из запросов ajax завершается с ошибкой, используя jquery ajaxError.

Если я смоделирую отказ запроса ajax, запустив сценарий выхода из системы на отдельной вкладке браузера, а затем заставлю приложение выполнять запросы ajax, оно будет выполнять код внутри ajaxError каждый раз, когда делается запрос ajax (что может быть фоновой задачей, пытающейся выполнить run или пользователь пытается взаимодействовать с приложением). Например, если есть 3 запроса, как показано в списке вверху вопроса, он выполнит код swal 3 раза. Я предполагаю, что это технически правильно, потому что 3 запроса ajax действительно не увенчались успехом.

Что я пытаюсь сделать, так это разработать способ реализации: «если первый запрос ajax не удался, снова прекратите выполнение кода внутри ajaxError()».

Я не знаю, если и как это достижимо? Пожалуйста, может кто-нибудь посоветовать.

jquery 3.2.1, SweetAlert 2


person Andy    schedule 08.01.2019    source источник


Ответы (1)


проверить код состояния => 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'
        });
    }

});

person MAjidH1    schedule 08.01.2019