Версия для печати. Взято с сайта phpsql.ru

На главную   Назад   Вперед

Объект ХМLHttpRequest

Для реализации обмена данными между веб-браузером и сервером используется объ-ект XMLHttpRequest. Этот объект в фоновом режиме может отправить запрос и полу-чить результат, который не отображается в окне веб-браузера. Получить доступ к резуль-тату запроса можно с помощью языка JavaScript.

Прежде чем использовать объект XMLHttpRequest, необходимо его создать с помощью оператора new. Проблема заключается в том, что в разных веб-браузерах объект создается по-разному. В одних используется встроенный объект window.XMLHttp-Request, а в других— ActiveX-объект MSXML2 . XMLHTTP или Microsoft .XMLHTTP. Кроссбраузерный код создания объекта приведен в листинге 10.4.

Листинг 10.4. Создание объекта XMLHttpRequest

if (window.XMLHttpRequest) {
   link = new XMLHttpRequest();
}
else {
   if (window.ActiveXObject) {
      var XMLHTTP = ["MSXML2.XMLHTTP.6.0",
"MSXML2.XMLHTTP.3.0",
                    "MSXML2.XMLHTTP", "Microsoft.XMLHTTP"];
      for (var i=0; i<4; i++) {
         try { // Обработка исключений
            link = new ActiveXObject(XMLHTTP[i]);
            break; // Если объект создан, то выход из цикла
         }
         catch (e) {}
      }
   }
}

Объект XMLHttpRequest имеет следующие методы.

• open(Метод передачи данных, адрес, Тип запроса) — подготавливает запрос к отправке на сервер. В первом параметре можно указать метод GET или POST. Параметр адрес предназначен для указания URL-адреса скрипта, которому будет отправлен запрос. Можно указать как абсолютный путь, так и относительный. При указании абсолютного пути следует иметь в виду, что запрос может быть отправлен только к домену, с которого был загружен текущий до-кумент. Кроме того, некоторые веб-браузеры не позволяют отправить запрос к домену http: //www. site. ru/, если документ был загружен с http: / /site. ru/. По этой причине лучше указывать относительный путь от корня сервера или от местонахож-дения текущего документа. Если для отправки данных используется метод GET, то после названия скрипта указываются передаваемые параметры. В параметре Тип запроса могут быть заданы следующие значения:

true— асинхронный запрос (выполнение текущего скрипта не приостанав-ливается до получения ответа);

false— синхронный запрос (выполнение текущего скрипта будет продол-жено только после получения ответа сервера).

В большинстве случаев используются именно асинхронные запросы, так как от-вет от сервера может занять некоторое время. Метод open () имеет еще два не-обязательных параметра: имя пользователя и пароль. В практике эти параметры не применяются, и мы их рассматривать не будем.

• setRequestHeader {Заголовок, 3начение) — позволяет добавить за-головок запроса. В большинстве случаев используется для указания типа переда-ваемых данных методом POST.

link.setRequestHeader(“ Content-Type “,
“application/x-www-form-urlencoded”);

• send (Данные для отправки методом POST) —отправляет запрос на сервер. В качестве параметра при запросе методом GET указывается значение null.

link.send(null);

Для метода POST указывается строка передаваемых данных. Передаваемые данные должны быть перекодированы с помощью функции encodeURIComponent () .

param = ,,textl = " + encodeURI Component ("Текст") ;
link.send(param);

Рассмотрим свойства объекта XMLHttpRequest.

• onreadystatechange — в этом свойстве указывается ссылка на функцию-обработчик при асинхронных запросах.

link.onreadystatechange = f_razborRequest;

Обратите внимание на тот факт, что название функции указывается без круглых скобок и параметров. Если указать круглые скобки, то смысл происходящего бу-дет другим. Функция будет выполнена, и результат ее работы будет присвоен свойству onreadystatechange. Так как в функцию-обработчик невозможно пе-редать параметр, то внутри функции мы можем обратиться к объекту XMLHttp-Request, только если он будет объявлен в глобальной области видимости. Это не всегда удобно. Однако передать параметр можно, указав в качестве обработчика анонимную функцию, внутри которой происходит вызов функции с параметром.

link.onreadystatechange = function() {
f_razborRequest(link);
};

Этим способом мы и будем пользоваться в дальнейших примерах. Функция f_razborRequest () будет вызываться несколько раз при каждом изменении статуса обработки запроса.

• readyState — содержит текущий статус обработки запроса. Может принимать следующие значения:

0 — объект запроса создан оператором new; 1 — запрос подготовлен с помощью метода open (); 2 — запрос отправлен методом send (); 3 — ответ доступен, но загружен не полностью; 4 — ответ полностью загружен с сервера и доступен для обработки. В дальнейшем нас будет интересовать именно статус 4.

• status — содержит код возврата при значении свойства readyState, равном 4. Успешными считаются коды в пределах от 200 до 299, а также код 304, указы-вающий, что документ не был изменен с последнего запроса.

Получить доступ к ответу сервера можно с помощью двух свойств. •

responseText — ответ в виде текста, фрагмента HTML-документа или объекта JSON; •

responseXML — ответ в виде XML-документа. Свойство будет доступно, только если в заголовках ответа сервера указан заголовок.

Content-Type: application/xml
или

Content-Type: text/xml

Кроме того, XML-документ должен быть иметь правильную структуру и соответствовать спецификации DOM.

Итак, как вы уже знаете, ответ сервера может быть предоставлен в виде:
фрагмента HTML-документа, скрипта JavaScript или просто текста;
XML-документа;
объекта JSON.
Рассмотрим каждый вариант обмена данными более подробно.

 
Предыдущая   На главную   Следующая