jQuery предоставляет удобные механизмы для работы с асинхронными
операциями, такими как AJAX-запросы, и позволяет эффективно обрабатывать
успешное выполнение и ошибки. Основными инструментами являются методы
.done(), .fail(), .always(), а
также объект jqXHR, возвращаемый функцией
$.ajax().
.done()Метод .done() используется для обработки успешного
завершения асинхронной операции. Он принимает функцию обратного вызова,
которая получает данные ответа и другие параметры.
$.ajax({
url: 'data.json',
method: 'GET'
})
.done(function(data, textStatus, jqXHR) {
console.log('Запрос успешно выполнен');
console.log('Данные:', data);
})
Ключевые моменты:
Функция обратного вызова вызывается только при успешном выполнении запроса (HTTP статус 2xx).
Параметры:
data — данные ответа от сервера.textStatus — строка состояния
("success").jqXHR — объект запроса, предоставляющий доступ к
метаданным ответа..fail()Метод .fail() используется для обработки ошибок запроса.
Он позволяет выполнять действия при сетевых ошибках, таймаутах или
получении ответа с ошибочным HTTP-статусом.
$.ajax({
url: 'data.json',
method: 'GET'
})
.fail(function(jqXHR, textStatus, errorThrown) {
console.error('Произошла ошибка');
console.error('Статус:', textStatus);
console.error('Сообщение ошибки:', errorThrown);
})
Ключевые моменты:
Параметры функции обратного вызова:
jqXHR — объект запроса, содержащий информацию о
состоянии запроса.textStatus — строковое описание ошибки
("timeout", "error", "abort",
"parsererror").errorThrown — текст ошибки, возвращённый сервером..always()Метод .always() выполняется в любом случае — как при
успешном завершении запроса, так и при ошибке. Это удобно для действий,
которые нужно выполнить независимо от результата, например, скрытие
индикатора загрузки.
$.ajax({
url: 'data.json',
method: 'GET'
})
.always(function() {
console.log('Запрос завершён (успех или ошибка)');
});
Ключевые моменты:
jqXHR и другие данные можно передать через цепочку
.done()/.fail().success, error и complete в
опциях $.ajax()Альтернативный способ обработки успеха и ошибок — указание
соответствующих функций в объекте настроек $.ajax():
$.ajax({
url: 'data.json',
method: 'GET',
success: function(data, textStatus, jqXHR) {
console.log('Данные получены через success');
},
error: function(jqXHR, textStatus, errorThrown) {
console.log('Ошибка через error');
},
complete: function(jqXHR, textStatus) {
console.log('Запрос завершён через complete');
}
});
Особенности:
success аналогичен .done().error аналогичен .fail().complete аналогичен .always().jQuery использует объект Deferred, который позволяет
строить цепочки обработки результатов асинхронных операций:
$.ajax('data.json')
.done(function(data) {
console.log('Успех 1');
return $.ajax('other.json');
})
.done(function(data) {
console.log('Успех 2 после первого запроса');
})
.fail(function(jqXHR, textStatus) {
console.error('Любая ошибка в цепочке', textStatus);
});
Преимущества:
.fail() для всей цепочки..done() и
.fail()..always() и complete полезны для
любых операций, которые должны выполняться независимо от
результата.jqXHR.status при сложной
обработке ошибок, чтобы различать сетевые ошибки и ошибки сервера.Обработка успеха и ошибок в jQuery обеспечивает гибкость и контроль
над асинхронными процессами, упрощая работу с AJAX и другими
асинхронными операциями. Методы .done(),
.fail(), .always() и соответствующие опции
$.ajax() позволяют выстраивать надёжные и читаемые сценарии
обработки данных.