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

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

Шрифт:

Следующий этап в выполнении запроса - установка заголовков запроса, если это необходимо. Запросы POST, например, требуют, чтобы был определен заголовок «Content-Type», определяющий MIME-тип тела запроса:

request.setRequestHeader("Content-Type", "text/plain");

Если вызвать метод

setRequestHeader
несколько раз с одним и тем же заголовком, новое значение не заменит прежнее: вместо этого в HTTP-запрос будет вставлено несколько копий заголовка или один заголовок с несколькими значениями.

Нельзя определять собственные заголовки «Content-Length», «Date», «Referer» и «User-Agent»: объект

XMLHttpRequest
добавляет их автоматически и не позволяет подделывать их. Аналогично объект
XMLHttpRequest
автоматически обрабатывает cookies и срок поддержки открытого соединения, определяет кодировку символов и выполняет кодирование сообщений, поэтому вы не должны передавать методу
setRequestHeader
следующие заголовки:

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» при попытке обратиться к ресурсу, отсутствующему на сервере.

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

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

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

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

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