Главная
страница 1 ... страница 2страница 3страница 4

XMLHTTP

В интерактивности - статические html сайты - это прошлое. Динамические с использованием CGI (или модулей сервера, например Apache) и баз данных, когда сервер при отправки формы формирует страницу и показывает ее после обновления - чуть современней, но все же во многих областях, где требуется практически сопостовимая с десктопными приложениями интерактивность - так же угасают. На смену приходят интерактивные функциональные программы, в полной мере взаимодействующие с пользователем; информация, полученная от сервера практически мгновенно отображается на экране без перезагрузке страницы. Речь идет об AJAX'e, что в расшифровке "асинхронный JavaScript и XML" (термин ввел Джесс Гарретт). А если более подробно, то - "асинхронный JavaScript + CSS + DOM + XMLHttpRequest".Рассмотрим XMLHttpRequest.

XMLHTTP (XMLHttpRequest, XHR) — набор API, используемый в языках JavaScript, JScript, VBScript и им подобных для пересылки различных данных (XML, XHTML, JSON и т.д.) по HTTP-протоколу между браузером и веб-сервером. Позволяет осуществлять HTTP-запросы к удаленному серверу без необходимости перезагружать страницу.

XMLHTTP является важной составляющей технологии AJAX (Asynchronous JavaScript And XML), используется многими сайтами для создания динамичных, быстро реагирующих на запросы пользователя приложений. Например XMLHTTP используется такими сайтами как Gmail, Google Suggest, MSN Virtual Earth. XMLHTTP работает только с файлами, находящимися на том же домене, что и использующая XMLHTTP страница. Как и в случае JavaScript, это сделано в целях безопасности (cross-site scripting).

Кроме пересылки XML, через XMLHTTP можно обмениваться данными формы и просто текстовыми строками.

История

Впервые был реализован компанией Microsoft, появившись в Internet Explorer 5.0 в виде объекта ActiveX, доступного через JScript, VBScript, или другие скриптовые языки, поддерживающиеся браузером. Программисты проекта Mozilla затем разработали совместимую версию, называющуюся XMLHttpRequest в Mozilla 1.0. В дальнейшем эта возможность также была реализована компаниями Apple начиная с Safari 1.2, родственным браузером Konqueror, компанией Opera Software начиная с Opera 8.01, и, вероятно, другими.



Методы класса XMLHttpRequest




Метод

Описание

  1. abort()

Отменяет текущий запрос, удаляет все заголовки, ставит текст ответа сервера в null.

  1. getAllResponseHeaders()

Возвращает полный список HTTP-заголовков в виде строки. Заголовки разделяются знаками пересноса (CR+LF).

Если флаг ошибки равен true, возвращает пустую строку.

Если статус 0 или 1, вызывает ошибку INVALID_STATE_ERR.


  1. getResponseHeader(headerName)

Возвращает значение указанного заголовка.

Если флаг ошибки равен true, возвращает null.

Если фзаголовок не найден, возвращает null.

Если статус 0 или 1, вызывает ошибку INVALID_STATE_ERR.



  1. open(method, URL, async, userName, password)

Определяет метод, URL и другие опциональные параметры запроса;

параметр async определяет, происходит ли работа в асинхронном режиме.

Последние три параметра необязательны.


  1. send(content)

Отправляет запрос на сервер.

  1. setRequestHeader(label, value)

Добавляет HTTP-заголовок к запросу.

  1. overrideMimeType(mimeType)

Позволяет указать mime-type документа, если сервер его не передал или передал неправильно.

Внимание: метод отсутствует в Internet Explorer!





Свойства класса XMLHttpRequest





Свойство

Тип

Описание

onreadystatechange

EventListener

Обработчик события, которое происходит при каждой смене состояния объекта. Имя должно быть записано в нижнем регистре.

readyState

unsigned short

Текущее состояние объекта (0 — не инициализирован, 1 — открыт, 2 — отправка данных, 3 — получение данных и 4 — данные загружены)

responseText

DOMString

Текст ответа на запрос.

Если статус не 3 или 4, возвращает пустую строку.



responseXML

Document

Текст ответа на запрос в виде XML, который затем может быть обработан посредством DOM.

Если статус не 4, возвращает null.



status

unsigned short

HTTP-статус в виде числа (404 — «Not Found», 200 — «OK» и т. д.)

statusText

DOMString

Статус в виде строки («Not Found», «OK» и т. д.).

Если статус не распознан, браузер пользователя должен вызвать ошибку INVALID_STATE_ERR.





Ошибки, вызываемые классом XMLHttpRequest


  • SECURITY_ERR-вызывается при попытке совершить запрос, запрещённый настройками безопасности в браузере пользователя.

  • NETWORK_ERR- вызывается при ошибке сети (во время синхронного запроса).

  • ABORT_ERR-вызывается при прерывании пользователем запроса (во время синхронного запроса).



Пример использования

План работы с объектом XMLHttpRequest можно представить следующим образом:

Создание экземпляра объекта XMLHttpRequest

Установка обработчика события

Открытие соединения и отправка запроса.

Создание экземпляра объекта XMLHttpRequest.

На этой стадии необходима отдельная реализация для разных браузеров. Конструкция создания объекта отличается: в IE 5 - IE 6 она реализована через ActiveXObject, а в остальных браузерах (IE 7, Mozilla, Opera, Netscape и Safari) — как встроенный объект типа XMLHttpRequest.

Вызов для ранних версий Internet Explorer выглядит так:

var req = new ActiveXObject("Microsoft.XMLHTTP");

В более поздних версиях Internet Explorer (до IE7) рекомендуется использовать:

var req = new ActiveXObject("Msxml2.XMLHTTP");

В остальных браузерах:

var req = new XMLHttpRequest();

То есть, для обеспечения кросс-браузерности кода, нужно лишь проверять наличие объектов window.XMLHttpRequest и window.ActiveXObject, и, в зависимости от того, какой есть, тот и применять.


В качестве универсального решения предлагается использование такой функции:

function createRequestObject()

{

if (window.XMLHttpRequest) {



try {

return new XMLHttpRequest();

} catch (e){}

} else if (window.ActiveXObject) {

try {

return new ActiveXObject('Msxml2.XMLHTTP');



} catch (e){

try {


return new ActiveXObject('Microsoft.XMLHTTP');

} catch (e){}

}

}

return null;



}

Установка обработчика событий, открытие соединения и отправка запросов


Эти вызовы выглядят так:

req.onreadystatechange = processReqChange;

req.open(<"GET"|"POST"|...>, , );
После определения всех параметров запроса его остается только отправить. Делается это функцией send(). Если необходимо передать на сервер POST-данные, их надо подставить в качестве параметра для этой функции. POST-данные должны быть свернуты в URL-escaped строку (кодировка UTF-8) и добавлен заголовок req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");. Другими словами эта строка будет иметь вид, который мы привыкли видеть в командной строке браузера, при передаче данных методом GET. При отправке GET-запроса для версии без ActiveX необходимо указать параметр null, в остальных случаях можно не указывать никаких параметров. Не будет ошибкой, если для GET всегда будет указан параметр null:

req.send(null);

После этого начинает работать вышеуказанный обработчик событий. Он — фактически основная часть программы. В обработчике обычно происходит перехват всех возможных кодов состояния запроса и вызов соответствующих действий, а также перехват возможных ошибок. Пример кода с этими двумя функциями:

var req;


function loadXMLDoc(url)

{

req = null;



if (window.XMLHttpRequest) {

try {


req = new XMLHttpRequest();

} catch (e){}

} else if (window.ActiveXObject) {

try {


req = new ActiveXObject('Msxml2.XMLHTTP');

} catch (e){

try {

req = new ActiveXObject('Microsoft.XMLHTTP');



} catch (e){}

}

}



if (req) {

req.onreadystatechange = processReqChange;

req.open("GET", url, true);

req.send(null);

}

}

function processReqChange()



{

try { // Важно!

// только при состоянии "complete"

if (req.readyState == 4) {

// для статуса "OK"

if (req.status == 200) {

// обработка ответа

} else {


alert("Не удалось получить данные:\n" +

req.statusText);

}

}

}



catch( e ) {

// alert('Caught Exception: ' + e.description);

// В связи с багом XMLHttpRequest в Firefox приходится отлавливать ошибку

// Bugzilla Bug 238559 XMLHttpRequest needs a way to report networking errors

// https://bugzilla.mozilla.org/show_bug.cgi?id=238559

}

}






<< предыдущая страница  
Смотрите также:
Глобальная компьютерная сеть – интернет 2 web 0 5 обзор технологий 7
497.86kb.
4 стр.
Глобальная сеть интернет и информационная среда
41.87kb.
1 стр.
Статья раскрывает проблему проектирования новой образовательной среды обучения, основанной на современных информационных и коммуникационных технологиях в условиях применения Интернет, Web-технологий, гипертекста
104.1kb.
1 стр.
Москва, Россия
75.38kb.
1 стр.
Интернет: скрытые угрозы у интернета много имен и свойств. Всемирная компьютерная сеть, способ мгновенной коммуникации, «территория свободы»
86kb.
1 стр.
Общие положения о web-сайтах Сайт от англ website: web — «паутина, сеть»
126.41kb.
1 стр.
Стоит отметить, что в 90-х годах прошлого столетия Интернет рассматривался как глобальная сеть, не имеющая границ, в том числе государственных, с присущей ему географической анонимностью пользователей
129.27kb.
1 стр.
Нормы пользования услугами сети передачи данных и доступа в сеть интернет общие положения
47.33kb.
1 стр.
Программа предпрофильного элективного курса
127.15kb.
1 стр.
Управление корпоративной информационно-образовательной средой на базе интернет-технологий
37.13kb.
1 стр.
В этом разделе мы рассмотрим вопросы подключения к всемирной паутине, безопасности, общения и развлечения в Сети. А также, что для этого необходимо
16.32kb.
1 стр.
Сеть и Интернет Заходим в Пуск->Панель управления->Сеть и Интернет
35.14kb.
1 стр.