В предыдущем параграфе мы увидели, что в функции обратного вызова в методе может использоваться объект jqXHR. По сути с ним так или иначе связаны все методы jQuery, которые предназначены для отправки ajax-запросов.
Данный объект представляет собой обертку над стандартным объектом javascript XMLHttpRequest. Для совместимости с XMLHttpRequest jqXHR предлагает нам следующие свойства и методы:
readyState
: возвращает состояние запроса. Имеет значения от 0 (запрос не отправлен) до 4 (запрос завершен)
status
: возвращает код статуса HTTP, который получает от сервера
statusText
: возвращает статус запроса в виде текста
responseXML
: возвращает ответ в виде XML
responseText
: возвращает ответ в виде простого текста
setRequestHeader(name, value)
: устанавливает заголовок запроса name со значением value. Если подобный заголовок уже имеется, то его значение заменяется на value
getAllResponseHeaders()
: возвращает все заголовки ответа
getResponseHeader(name)
: возвращает заголовок ответа name
abort()
: прерывает запрос
Но если для обработки ответа объект XMLHttpRequest предлагает нам обработать событие onreadystatechange
, то для jqXHR определено
сразу несколько методов, которые помогают обработать ответ:
done(function(data, textStatus, jqXHR))
: обрабатывает успешный ответ с сервера
fail(function(jqXHR, textStatus, errorThrown))
: обрабатывает ответ от сервера, запрос к которому закончился ошибкой
always(function(data|jqXHR, textStatus, jqXHR|errorThrown))
: обрабатывает как успешные ответы с сервера, так и сообщения с ошибкой
then(function(data, textStatus, jqXHR), function(jqXHR, textStatus, errorThrown))
: включает функциональность методов done и fail, принимая соответственно две функции обработки ответа
Итак, ранее мы использовали метод get следующим образом:
$.get('ajax.php', function(data) { $('#news').html(data); alert('Данные заружены'); });
Но так как метод get возвращает объект jqXHR, то мы можем написать следующим образом, применив метод done
:
$.get('ajax.php').done(function(data) { $('#news').html(data); alert('Данные заружены'); });
Подобным образом мы можем применить и другие методы:
var jqxhr=$.get('ajax.php'); jqxhr.done(function(data) { $('#result').html(data); }); jqxhr.fail(function(data) { $('#result').html("ОШИБКА!"); });