Этот пост является продолжением недавней статьи, в которой описывались методы удаленного взаимодействия с сервером посредством JavaScript, в частности с помощью AJAX. Как Вы уже знаете, в FireFox 3 JS-объект XMLHttpRequest будет иметь возможность посылать запросы на сторонние сайты. Microsoft по-видимому снова решила выделиться и вместо того, чтобы унифицировать интерфейс для отправки запросов, решила внедрить новый объект в Internet Explorer 8, который также будет способен делать междоменные вызовы. Заметьте, что до этого в IE использовался (собственно и сейчас используется) свой объект ActiveX с названием Microsoft.XMLHTTP, однако вместо его изменения, как поступили разработчики FF с XMLHttpRequest, мелкомягкие решили создать полностью новый, и при этом он не будет связан с ActiveX! Напрашивается вопрос: раз уж принялись за создание нового объекта, почему бы не сделать его максимально универсальным? Мне непонятно такое стремление, впрочем, как и всем разработчикам, среди которых данное решение поддержки однозначно не найдет.
Итак, новый объект носит название XDomainRequest, и, как уже говорилось выше, его принципиальной особенностью является поддержка запросов на удаленные сайты. Распознать запрос, поступивший от клиента, использующего XDomainRequest, серверный скрипт может по заголовку XDomainRequest. В свою очередь, скрипт должен ответить пакетом, содержащим заголовок XDomainRequestAllowed. Принцип, как видим, такой же как и в FF 3, однако названия заголовков совершенно разные. Сравнивая XDomainRequest и XMLHttpRequest, можно заметить множество черт, которые унаследовал новый объект от XMLHttpRequest.
Свойства XDomainRequest:
- contentType
- responseText
- timeout
События XDomainRequest:
- onerror
- onload
- onprogress
- ontimeout
Методы XDomainRequest:
- open
- send
- abort
Пример кода для работы с XDomainRequest:
if(window.XDomainRequest) { var req = new window.XDomainRequest; req.onload=xdrLoad; req.open("get", "http://host/backend-script.php"); req.send(); } else { alert("Where is your IE ???"); } function xdrLoad() { var data=req.responseText; alert("Data:\r\n"+data); }
Leave a Reply