XDomainRequest vs XMLHttpRequest

Этот пост является продолжением недавней статьи, в которой описывались методы удаленного взаимодействия с сервером посредством 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);
}


2 комментария

  1. wi11son, 21. мая 2008, 23:29

    Очень в тему пост)
    МС как всегда считает, что не обязательно считаться с другими разработчиками, либо в очередной раз оттягивает время. Пока девелоперы будут изучать новую технологию, а придется, ибо грядет IE8 (интересно, он хотя бы станет поддерживать DTD?), они еще что-нибудь изобретут))))

    По этому поводу есть интересная статья, где кстати не только http://www.joelonsoftware.com/articles/APIWar.html «How M$ lost API war, дочитай до конца если время найдешь, очень интересно. Хоть и старая (2004) но до сих пор актуальная. Постом про XDomainRequest, ты лишь это подтвердил.
    НО ВСЕ ЖЕ? как быть с ActiveX, что ж теперь выбрасывать знания на помойку? (преувеличено конечно) «Будет день — будет пища»(с)

     
  2. Kuzya, 22. мая 2008, 9:05

    Давольно интересно. Теперь под атаки попадают даже те клиенты у которых ActiveX блочится файром или ещё чем =)

     

Write a comment: