XML DOM - объект XMLHttpRequest

Объект XMLHttpRequest

Объект XMLHttpRequest предоставляет полный доступ к протоколу HTTP, включая возможность выполнять POST и HEAD запросы, а также обычные GET запросы. XMLHttpRequest может синхронно или асинхронно возвращать ответ веб-сервера и может возвращать содержимое в виде текста или DOM документа.

Хотя он называется XMLHttpRequest, он не ограничивается использованием с XML-документами: он может приниматьany формы текстовых документов.

объект XMLHttpRequest известен как AJAX одной из ключевых функций архитектуры веб-приложений.

поддержка браузерами

XMLHttpRequest получает хорошую поддержку от всех современных браузеров. Единственная зависимость от браузера связана с созданием объекта XMLHttpRequest. В IE 5 и IE 6 необходимо использовать специфичную для IE конструкторскую функцию ActiveXObject(). Как и в Объект XMLHttpRequest Это раздел介绍的.

Стандартизация W3C

Объект XMLHttpRequest еще не стандартизирован, но W3C начал стандартизацию работы, и содержимое этой руководства основано на работе над проектом стандарта.

Текущая реализация XMLHttpRequest уже bastante一致на. Но есть небольшие различия с стандартом. Например, одна реализация может возвращать null, а стандарт требует пустой строки, или реализация может установить readyState в 3, не гарантируя, что все заголовки ответа будут доступны.

Свойство

readyState

Состояние HTTP запроса. Когда XMLHttpRequest создается в первый раз, значение этого свойства начинается с 0 и增加到 4 до получения полного HTTP ответа.

Каждое из 5 состояний имеет связанное неофициальное имя. В таблице ниже приведены состояния, названия и их значения:

Состояние Название Описание
0 Uninitialized Инициализированное состояние. Объект XMLHttpRequest создан или был сброшен методом abort().
1 Open Метод open() уже вызван, но метод send() не вызван. Запрос еще не отправлен.
2 Sent Метод Send() уже вызван, HTTP запрос уже отправлен на веб-сервер. Ответ не получен.
3 Receiving Все заголовки ответа уже получены. Начато接收, но не завершено тело ответа.
4 Loaded HTTP ответ уже полностью получен.

Значение readyState не уменьшается,除非 во время обработки запроса был вызван метод abort() или метод open(). Каждый раз, когда значение этого свойства увеличивается, вызывается обработчик события onreadystatechange.

responseText

До сих пор полученное тело ответа от сервера (без заголовков), или пустая строка, если данные еще не получены.

Если readyState меньше 3, то это свойство является пустой строкой. Когда readyState равен 3, это свойство возвращает уже полученную часть ответа. Если readyState равен 4, это свойство сохраняет полный тело ответа.

Если ответ содержит заголовок с указанием кодировки символов для тела ответа, то используется эта кодировка. В противном случае, предполагается использование Unicode UTF-8.

responseXML

Ответ на запрос, разложенный в XML и представляющий собой Объект Documentвозвратить.

status

возвратимый сервером HTTP-статус код, например, 200 означает успех, а 404 означает ошибку "Не найдено". Чтение этого свойства при readyState меньше 3 вызывает исключение.

statusText

Эта свойство указывает HTTP-статус код запроса по имени, а не по числу. Например, когда статус равен 200, это "OK", когда статус равен 404, это "Не найдено". Как и свойство status, чтение этого свойства при readyState меньше 3 вызывает исключение.

Обработчик событий

onreadystatechange

Функция обработчика событий, которая вызывается каждый раз при изменении свойства readyState. При readyState 3 он может быть вызван несколько раз.

Метод

abort()

Отменить текущий ответ, закрыть соединение и завершить любые неоконченные сетевые операции.

Этот метод сбрасывает объект XMLHttpRequest к состоянию readyState 0 и отменяет все неоконченные сетевые операции. Например, если запрос занял слишком много времени, и ответ больше не необходим, можно вызвать этот метод.

getAllResponseHeaders()

Возвратить HTTP-заголовки ответа в виде непarsed строки.

Если readyState меньше 3, этот метод возвращает null. В противном случае, он возвращает все HTTP-заголовки ответа, отправленные сервером. Заголовки возвращаются в виде одной строки, по одной строке на заголовок. Строки разделены символом перевода строки "\r\n".

getResponseHeader()

Возвратить значение指定的 HTTP-заголовка ответа. Параметр - это имя HTTP-заголовка, который нужно вернуть. Можно использовать любую регистрацию для указания имени заголовка, сравнение с заголовками ответа не зависит от регистра.

Возвратное значение этого метода - это значение指定的 HTTP-заголовка ответа, если этот заголовок не был получен или.readyState меньше 3, то это будет пустая строка. Если получены несколько заголовков с указанным именем, значения этих заголовков соединяются и возвращаются, значения заголовков разделены запятыми и пробелами.

open()

Инициализировать параметры HTTP-запроса, такие как URL и метод HTTP, но не отправлять запрос.

send()

Отправить HTTP-запрос, используя параметры, переданные методу open(), а также опциональное тело запроса, переданное этому методу.

setRequestHeader()

Установить или добавить HTTP-запрос к открытому, но не отправленному запросу.

XMLHttpRequest.open()

Инициализация параметров HTTP-запроса

Синтаксис

open(method, url, async, username, password)

Параметр method является HTTP-методом, используемым для запроса. Значения включают GET, POST и HEAD.

Параметр url является телом запроса. Большинство браузеров реализуют стратегию безопасности origins, и требует, чтобы этот URL имел такой же主机 и порт, что и текст скрипта, который его содержит.

Параметр async указывает на то, что запрос должен выполняться асинхронно. Если этот параметр равен false, запрос является синхронным, и вызовы send() будут блокироваться до полного получения ответа. Если этот параметр равен true или опущен, запрос является асинхронным и обычно требует обработчика событий onreadystatechange.

Параметры username и password являются опциональными и предоставляют права доступа для авторизации, необходимые для url. Если они указаны, они заменяют любые права доступа, указанные в url.

Объяснение

Этот метод инициализирует параметры запроса для использования в методе send() позже. Он устанавливает readyState в 1, удаляет все ранее指定的 заголовки запроса и все полученные заголовки ответа, а также устанавливает параметры responseText, responseXML, status и statusText в их значения по умолчанию. Вызов этого метода безопасен, когда readyState равен 0 (когда XMLHttpRequest-объект только что создан или вызван метод abort()) и когда readyState равен 4 (после получения ответа). При вызове метода для любого другого состояния поведение метода open() определено.

Метод open() не выполняет других действий, кроме сохранения параметров запроса для использования в методе send(), а также перезагрузки XMLHttpRequest-объекта для повторного использования. Следует отметить, что при вызове этого метода реализация обычно не открывает сетевое соединение с веб-сервером.

XMLHttpRequest.send()

Отправка HTTP-запроса

Синтаксис

send(body)

Если HTTP-метод, указанный при вызове open(), является POST или PUT, параметр body определяет запросное тело в виде строки или Объект DocumentЕсли запросное тело не необходимо, этот параметр равен null. Для любого другого метода этот параметр недоступен и должен быть null (некоторые реализации не позволяют опускать этот параметр).

Объяснение

Этот метод вызывает отправку HTTP-запроса. Если之前 не был вызван open() или, более конкретно, если состояние readyState не равно 1, send() выбрасывает исключение. В противном случае он отправляет HTTP-запрос, который состоит из следующих частей:

  • Метод HTTP, URL и права доступа, указанные в предыдущем вызове open() (если они есть).
  • Заголовок запроса, указанный в предыдущем вызове setRequestHeader() (если он есть).
  • Передаваемый этому методу body Параметры.

Как только запрос отправлен, send() устанавливает состояние readyState в 2 и вызывает обработчик события onreadystatechange.

Если параметр async, указанный в предыдущем вызове open(), равен false, этот метод будет блокировать и не возвращать значение, пока состояние readyState не станет 4 и серверный ответ не будет полностью получен. В противном случае, если параметр async равен true или этот параметр опущен, send() немедленно возвращает значение, и, как будет объяснено позже, серверный ответ будет обрабатываться в фоновом потоке.

Если серверный ответ содержит HTTP-переадресацию, метод send() или фоновый поток автоматически следуют за переадресацией. После того как все HTTP-заголовки ответа уже получены, send() или фоновый поток устанавливают состояние readyState в 3 и вызывают обработчик события onreadystatechange. Если ответ较长, send() или фоновый поток могут вызывать обработчик события onreadystatechange в состоянии 3: это может служить индикатором прогресса загрузки. В конце концов, когда ответ завершен, send() или фоновый поток устанавливают состояние readyState в 4 и вызывают обработчик события в последний раз.

XMLHttpRequest.setRequestHeader()

Синтаксис

setRequestHeader(name, value)

Параметр name - это имя заголовка, который нужно установить. Этот параметр не должен включать пробелы, двоеточия или строки перевода.

Параметр value - это значение заголовка. Этот параметр не должен включать строки перевода.

Объяснение

Метод setRequestHeader() определяет заголовок HTTP-запроса, который должен быть включен в запрос, отправленный через следующий вызов send(). Этот метод можно вызывать только когда состояние readyState равно 1, например, после вызова open(), но до вызова send().

Если уже был указан заголовок с заданным именем, новый значений этого заголовка будет: значение, указанное ранее,加上 запятую, пробел и значение, указанное в этом вызове.

Если вызов open() указывает на квалификацию аутентификации, XMLHttpRequest автоматически отправляет соответствующий заголовок запроса Authorization. Однако, вы можете использовать setRequestHeader() для добавления этого заголовка. Аналогично, если веб-сервер уже сохраняет и передает cookie, связанные с URL, переданным в open(), соответствующие заголовки Cookie или Cookie2 автоматически включаются в запрос. Эти cookie можно добавить в заголовок, вызывая setRequestHeader(). XMLHttpRequest также может предоставить значение по умолчанию для заголовка User-Agent. Если он это делает, любое значение, указанное вами для этого заголовка, будет добавлено после этого значения по умолчанию.

Некоторые заголовки запросов устанавливаются XMLHttpRequest автоматически, а не этим методом, чтобы соответствовать протоколу HTTP. Это включает в себя такие заголовки, как заголовки, связанные с прокси:

  • Host
  • Connection
  • Keep-Alive
  • Accept-charset
  • Accept-Encoding
  • If-Modified-Since
  • If-None-Match
  • If-Range
  • Range