Объект jqXHR
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.