Есть ли способ заставить ajaxError jquery перестать работать после первого сбоя запроса 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 потерпел неудачу, используя jjery 's ajaxError.

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

То, что я пытаюсь сделать, - это разработать способ реализации: "если первый запрос ajax завершится неудачно, прекратите запуск кода внутри ajaxError() снова".

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

JQuery 3.2.1, SweetAlert 2

1 ответ

Проверьте 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'
        });
    }

});

Другие вопросы по тегам