Объект jqXHR

Материал из JQuery

Перейти к: навигация, поиск

jQuery XMLHttpRequest (jqXHR) появился в библиотеке jQuery в версии 1.5 и является расширенным вариантом объекта XMLHttpRequest. Например, он всегда будет содержать поля responseText и responseXML, а так же метод getResponseHeader(). Если запрос не предполагает использование нативного XMLHttpRequest (например в случае кроссдоменного запроса скрипта), jQuery создает jqXHR с нуля, и заполняет его насколько это возможно.

Начиная с версии jQuery-1.5.1 jqXHR содержит метод overrideMimeType (он был доступен в jQuery-1.4.x, но был временно удален из версии 1.5). С помощью него можно например изменить заголовок ответа, отвечающий за тип данных в нем (ответе):

$.ajax({
  url: "http://fiddle.jshell.net/favicon.png",
  beforeSend: function ( xhr ) {
    xhr.overrideMimeType("text/plain; charset=x-user-defined");
  }
}).done(function ( data ) {
  if( console && console.log ) {
    console.log("Sample of data:", data.slice(0, 100));
  }
});

Одной из особенностей jqXHR является то, что он реализует интерфейс объекта deferred (точнее, его заместителя). Помимо стандартных для объекта deferred методов .done(), .fail() и .then(), с помощью которых можно устанавливать обработчики, в jqXHR реализованы: .success(), .error() и .complete(). Это сделано для соответствия привычным названиям методов, с помощью которых устанавливаются обработчики выполнения ajax-запросов. Однако начиная с jQuery-1.8 эти три метода станут нежелательными для использования.

В любых браузерах объект jqXHR будет гарантированно обладать следующими методами и свойствами объекта XMLHttpRequest:

readyState
status
statusText
responseXML и/или responseText (доступен в тех же случаях, что и в XMLHttpRequest)
setRequestHeader(name, value)
getAllResponseHeaders()
getResponseHeader()
abort()

Вместе с тем, стандартное свойство onreadystatechange в jqXHR доступно не будет (надо заметить, что во многих источниках не рекомендуют использовать это свойство). Однако, методы обработки выполнения запросов (.done(), .fail() и .then()) покрывают возможности onreadystatechange.