После того как объект XMLHttpRequest создан, начинается следующий этап – от_ правка запроса веб_серверу. Этот процесс сам по себе также состоит из несколь_ ких этапов. В первую очередь нужно вызвать метод open(), которому передается URL запроса и метод выполнения HTTP_запроса. Большая часть HTTP_запро_ сов выполняется методом GET, который просто загружает содержимое по задан_ ному URL_адресу. Другой, не менее полезный метод – POST; этот метод исполь_ зуется в основном HTML_формами: он позволяет включать в текст запроса имена и значения переменных. Еще один интересный метод – HEAD: он просто запра_ шивает у сервера заголовки, соответствующие заданному URL_адресу. Это по_ зволяет сценариям проверять, например, время последнего изменения докумен_ та без загрузки содержимого этого документа. Указать метод и URL_адрес запро_ са можно следующим образом:
request.open("GET", url, false);
По умолчанию метод open() настраивает объект XMLHttpRequest на выполнение асинхронного запроса. Если передать ему в третьем аргументе значение false, запрос будет выполнен синхронно. Вообще, предпочтительнее использовать
498 Глава 20. Работа с протоколом HTTP
асинхронные запросы, но синхронные запросы выполняются проще, поэтому наше рассмотрение мы начнем с них.
Помимо третьего необязательного аргумента метод open() может принимать имя и пароль в четвертом и пятом аргументах. Они используются для выполнения запроса к серверу, требующему авторизации.
Метод open() не отправляет запрос, он просто сохраняет свои аргументы для по_ следующего использования, когда будет производиться фактическая отправка запроса. Прежде чем отправить запрос, необходимо настроить некоторые заго_ ловки запроса. Вот несколько примеров:1
Обратите внимание: веб_броузер автоматически добавляет к создаваемому за_ просу все необходимые cookies. Явно настраивать заголовок "Cookie" может по_ требоваться только при необходимости отправить на сервер подложный cookie.
Наконец, после создания объекта запроса вызовом метода open() и установки не_ обходимых заголовков можно выполнить отправку запроса:
request.send(null);
В качестве аргумента функции send() передается тело запроса. Для HTTP_запро_ сов GET всегда используется значение null. Однако для запросов POST аргумент должен содержать данные формы, отправляемой на сервер (см. пример 20.5). Пока мы просто будем передавать значение null. (Обратите внимание: значение null должно передаваться обязательно. Объект XMLHttpRequest является клиент_ ским, по крайней мере в броузере Firefox, его методы не допускают отсутствия аргументов, что вполне допустимо в обычных JavaScript_функциях.)