jQuery предоставляет мощный механизм работы с AJAX-запросами, включая набор глобальных событий, которые автоматически срабатывают при запуске, завершении или ошибках любых AJAX-запросов на странице. Эти события позволяют централизованно управлять поведением приложения, отслеживать загрузку данных и создавать единый пользовательский интерфейс для обработки состояний AJAX.
Все глобальные события работают через объект document и
срабатывают для любого AJAX-запроса, инициированного с помощью jQuery
($.ajax, $.get, $.post и т.д.).
Основные события:
ajaxStart Срабатывает, когда начинается первый AJAX-запрос. Если одновременно выполняются несколько запросов, событие сработает только при запуске первого. Используется, например, для отображения индикатора загрузки.
$(document).ajaxStart(function() {
console.log("Начало AJAX-запроса");
$("#loader").show();
});ajaxStop Срабатывает, когда завершился последний активный AJAX-запрос. Полезно для скрытия индикаторов загрузки или выполнения очистки интерфейса.
$(document).ajaxStop(function() {
console.log("Все AJAX-запросы завершены");
$("#loader").hide();
});ajaxSend Срабатывает перед отправкой каждого AJAX-запроса. Предоставляет возможность изменить заголовки, данные запроса или выполнить логирование.
$(document).ajaxSend(function(event, jqXHR, settings) {
console.log("Отправка AJAX-запроса на URL: " + settings.url);
});ajaxComplete Срабатывает после завершения любого
AJAX-запроса, независимо от результата (успех или ошибка). Предоставляет
полный доступ к объекту запроса jqXHR и настройкам запроса
settings.
$(document).ajaxComplete(function(event, jqXHR, settings) {
console.log("AJAX-запрос завершен: " + settings.url);
});ajaxSuccess Срабатывает после успешного завершения запроса (код ответа 2xx). Позволяет централизованно обработать данные, полученные с сервера.
$(document).ajaxSuccess(function(event, jqXHR, settings, data) {
console.log("Данные получены успешно: ", data);
});ajaxError Срабатывает при ошибках запроса, например при сетевых проблемах или получении кода ответа 4xx/5xx. Используется для логирования ошибок или отображения сообщений пользователю.
$(document).ajaxError(function(event, jqXHR, settings, thrownError) {
console.log("Ошибка AJAX-запроса: " + thrownError);
});Глобальные события позволяют централизованно управлять поведением интерфейса при AJAX-запросах. Некоторые распространенные сценарии:
Индикаторы загрузки События
ajaxStart и ajaxStop позволяют отображать и
скрывать индикаторы прогресса без необходимости вручную управлять каждым
отдельным запросом.
Централизованное логирование Использование
ajaxSend, ajaxComplete и
ajaxError позволяет вести журнал всех AJAX-запросов,
включая URL, данные запроса, коды ошибок и время выполнения.
Обработка ошибок ajaxError дает
возможность единообразно реагировать на ошибки запросов, например,
показывать всплывающие уведомления или повторять попытку
запроса.
Модификация запросов Через ajaxSend
можно автоматически добавлять токены авторизации, заголовки или
параметры ко всем запросам без необходимости прописывать их для каждого
вызова $.ajax.
Глобальные события срабатывают только если AJAX-запрос
выполняется через jQuery. Запросы, созданные через
fetch, XMLHttpRequest напрямую или сторонние
библиотеки, не участвуют.
Если в вызове $.ajax указать
global: false, глобальные события для этого запроса не
будут срабатывать. Это удобно для фоновых запросов, которые не должны
влиять на интерфейс.
$.ajax({
url: "/hidden-data",
global: false
});Последовательность срабатывания событий для одного запроса:
ajaxSend → ajaxSuccess/ajaxError
→ ajaxComplete При этом ajaxStart и
ajaxStop учитывают все активные запросы на
странице.
ajaxStart и ajaxStop для
глобального спиннера — это экономит дублирование кода на каждой кнопке
или форме.ajaxSend и
ajaxError помогает быстро выявлять проблемы с сетью или
сервером.ajaxStop сработает только после завершения всех
активных запросов, а не каждого отдельно.Глобальные AJAX-события создают единый контрольный механизм над всей системой асинхронных запросов и упрощают управление состоянием интерфейса в масштабных приложениях. Их правильное применение повышает надежность, поддерживаемость и прозрачность работы с серверными данными.