Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

Accept-Charset Content-Transfer-Encoding ТЕ

Accept-Encoding Date Trailer

Connection Expect Transfer-Encoding

Content-Length Host Upgrade

Cookie Keep-Alive User-Agent

Cookie2 Referer Via

В запросе можно определить заголовок «Authorization», но обычно в этом нет необходимости. При выполнении запроса к ресурсу, защищенному паролем, передайте имя пользователя и пароль методу

open
в четвертом и пятом аргументах, а объект
XMLHttpRequest
автоматически установит соответствующие заголовки. (О третьем необязательном аргументе метода
open
рассказывается ниже, а описание аргументов, в которых передаются имя пользователя и пароль, можно найти в справочной части книги.)

Последний этап в процедуре выполнения HTTP-запроса с помощью объекта

XMLHttpRequest
– передача необязательного тела запроса и отправка его серверу. Делается это с помощью метода
send:

request.send(null);

GET-запросы не имеют тела, и в этом случае можно передать методу значение null или вообще опустить аргумент. POST-запросы обычно имеют тело, и оно должно соответствовать заголовку «Content-Type», установленному с помощью метода

setRequestHeader
.

Пример 18.1 демонстрирует использование всех методов объекта

XMLHttpRequest
, описанных выше. Он отправляет серверу текстовую строку методом POST и игнорирует ответ, возвращаемый сервером.

Пример 18.1. Отправка простого текста на сервер методом POST

function postMessage(msg) {

var request = new XMLHttpRequest; // Новый запрос

request.open("POST", "/log.php"); // серверному сценарию методом POST

// Отправить простое текстовое сообщение в теле запроса

request.setRequestHeader("Content-Type", // Тело запроса - простой текст

"text/plain;charset=UTF-8");

request.send(msg); // msg как тело запроса

// Запрос выполнен. Мы игнорируем возможный ответ или ошибку.

}

Обратите внимание, что вызов метода

send
в примере 18.1 инициирует запрос и затем возвращает управление: он не блокируется в ожидании ответа от сервера. HTTP-ответы практически всегда обрабатываются асинхронно, как будет показано в следующем разделе.

Порядок имеет значение

Части HTTP-запроса следуют в определенном порядке: метод запроса и URL-адрес должны определяться в первую очередь, затем должны устанавливаться заголовки запроса и, наконец, тело запроса. Обычно реализации

XMLHttpRequest
ничего не отправляют в сеть, пока не будет вызван метод
send.
Но прикладной интерфейс
XMLHttpRequest
спроектирован так, как если бы каждый метод немедленно отправлял данные в сеть. Это означает, что методы объекта
XMLHttpRequest
должны вызываться в порядке, соответствующем структуре HTTP-запроса. Например, метод
setRequestHeader
должен вызываться после метода
open
и перед методом
send,
в противном случае он возбудит исключение.

******************************************

18.1.2. Получение ответа

Полный HTTP-ответ содержит код состояния, набор заголовков ответа и тело ответа. Все это доступно в виде свойств и методов объекта

XMLHttpRequest
:

• Свойства

status
и
statusText
возвращают код состояния HTTP в числовом и текстовом виде. Эти свойства хранят стандартные HTTP-значения, такие как 200 и «ОК» в случае успешного выполнения запроса или 404 и «Not Found» при попытке обратиться к ресурсу, отсутствующему на сервере.

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

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.

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

Воспоминания о Корнее Чуковском

Коллектив авторов
Документальная литература:
биографии и мемуары
6.25
рейтинг книги
Воспоминания о Корнее Чуковском

Драйв Астарты

Розов Александр Александрович
5. Конфедерация Меганезия
Фантастика:
фэнтези
5.00
рейтинг книги
Драйв Астарты

Пески веков (сборник)

Уиндем Джон Паркс Лукас Бейнон Харрис
1970. Зарубежная фантастика
Фантастика:
научная фантастика
5.00
рейтинг книги
Пески веков (сборник)

Бастард Императора. Том 3

Орлов Андрей Юрьевич
3. Бастард Императора
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 3

#Бояръ-Аниме. Газлайтер. Том 36

Володин Григорий Григорьевич
36. История Телепата
Фантастика:
боевая фантастика
аниме
фэнтези
5.00
рейтинг книги
#Бояръ-Аниме. Газлайтер. Том 36

Рассказы

Крапивин Владислав Петрович
Детские:
прочая детская литература
5.00
рейтинг книги
Рассказы

Я – Легенда

Гарцевич Евгений Александрович
1. Я - Легенда!
Фантастика:
боевая фантастика
попаданцы
рпг
фантастика: прочее
5.00
рейтинг книги
Я – Легенда

Вечный. Книга VI

Рокотов Алексей
6. Вечный
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Вечный. Книга VI

Ты - наша

Зайцева Мария
1. Наша
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Ты - наша

Менталист. Эмансипация

Еслер Андрей
1. Выиграть у времени
Фантастика:
альтернативная история
7.52
рейтинг книги
Менталист. Эмансипация

Учитель из прошлого тысячелетия

Еслер Андрей
6. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Учитель из прошлого тысячелетия

Офицер

Земляной Андрей Борисович
1. Офицер
Фантастика:
боевая фантастика
7.21
рейтинг книги
Офицер

Я – Легенда 2: геном хищника

Гарцевич Евгений Александрович
2. Я - Легенда!
Фантастика:
боевая фантастика
рпг
фантастика: прочее
попаданцы
5.00
рейтинг книги
Я – Легенда 2: геном хищника

Древесный маг Орловского княжества 4

Павлов Игорь Васильевич
4. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 4