Вход/Регистрация
JavaScript. Подробное руководство, 6-е издание
вернуться

Флэнаган Дэвид

Шрифт:

• Заголовки ответа можно получить с помощью методов

getResponseHeader
и
getAllResponseHeaders.
Обработка cookies выполняется объектом
XMLHttpRequest
автоматически: он исключает заголовки «Cookie» из множества, возвращаeмого методом
getAllResponseHeaders,
и возвращает null, если передать аргумент «Set-Cookie» или «Set-Cookie2» методу
getResponseHeader.

• Тело ответа в текстовом виде доступно через свойство

responseText
или в виде объекта
Document
через свойство
responseXML
. (Выбор такого имени свойства объясняется историческими причинами: фактически оно предназначено для работы с XHTML- и XML-документами, но спецификация «ХНН2» определяет, что оно также должно работать с обычными HTML-документами.) Более подробно о свойстве
responseXML
рассказывается в разделе 18.1.2.2.

Обычно объект

XMLHttpRequest
используется в асинхронном режиме (но загляните в раздел 18.1.2.1): метод
send
возвращает управление сразу же после отправки запроса, поэтому методы и свойства, перечисленные выше, не могут использоваться до фактического получения ответа. Чтобы определить момент получения ответа, необходимо обрабатывать событие «readystatechange» (или событие «progress», определяемое новой спецификацией «ХНН2» и описываемое в разделе 18.1.4), возбуждаемое в объекте
XMLHttpRequest
. Но, чтобы понять, как обрабатывать это событие, необходимо сначала разобраться со свойством
readyState
.

Свойство

readyState
– это целочисленное значение, определяющее код состояния HTTP-запроса; его возможные значения перечислены в табл. 18.1. Идентификаторы, указанные в первой колонке, - это константы, определяемые конструктором
XMLHttpRequest
. Эти константы являются частью спецификации
XMLHttpRequest
, но старые версии броузеров и ІE8 не определяют их, поэтому часто можно увидеть программный код, в котором вместо константы
XMLHttpRequest.DONE
используется числовое значение 4.

Теоретически событие «readystatechange» генерируется всякий раз, когда изменяется значение свойства

readyState
. На практике же событие может не возбуждаться, когда свойство
readyState
получает значение 0 или 1. Оно часто возбуждается при вызове метода
send,
даже при том, что свойство
readyState
по-прежнему содержит значение
OPENED
. Некоторые броузеры возбуждают событие множество раз для состояния
LOADING
, чтобы обеспечить обратную связь. Все броузеры возбуждают событие «readystatechange», когда завершается прием ответа сервера и свойство
readyState
получает значение 4. Так как это событие может возбуждаться еще до завершения приема ответа, обработчики события «readystatechange» всегда должны проверять значение свойства
readyState
.

Чтобы обрабатывать события «readystatechange», нужно присвоить функцию обработчика события свойству

onreadystatechange
объекта
XMLHttpRequest
. Можно также воспользоваться методом
addEventListener
(или
attachEvent
в IE версии 8 и ниже), но обычно для обработки запроса бывает вполне достаточно одного обработчика, поэтому проще установить свойство
onreadystatechange
.

Пример 18.2 определяет функцию

getText,
которая демонстрирует особенности обработки событий «ready statechange». Обработчик события сначала проверяет завершение запроса. После этого он проверяет код состояния ответа и убеждается в успешном выполнении. Затем он извлекает заголовок «Content-Type», чтобы убедиться, что получен ответ ожидаемого типа. Если выполняются все три условия, он передает тело ответа (в виде текста) указанной функции обратного вызова.

Пример 18.2. Получение HTTP-ответа в обработчике

onreadystatechange

// Выполняет запрос HTTP GET содержимого указанного URL-адреса.

// После успешного получения ответа проверяет, содержит ли он простой текст,

// и передает его указанной функции обратного вызова

function getText(url, callback) {

  • Читать дальше
  • 1
  • ...
  • 323
  • 324
  • 325
  • 326
  • 327
  • 328
  • 329
  • 330
  • 331
  • 332
  • 333
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: