Есть ли способ заставить 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'
});
}
});