Есть ли способ заставить ajaxError jquery перестать работать после первого сбоя запроса ajax? - PullRequest
0 голосов
/ 08 января 2019

Сценарий: у меня есть веб-приложение, которое выполняет различные запросы 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 завершился неудачей, с помощью ajaxError .

jquery.

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

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

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

jquery 3.2.1, SweetAlert 2

1 Ответ

0 голосов
/ 08 января 2019

check 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'
        });
    }

});

...