Проблема XDomainRequest - PullRequest
       14

Проблема XDomainRequest

8 голосов
/ 19 января 2011

Я пытаюсь сделать асинхронный вызов службы, которая возвращает json, используя XDomainRequest (IE8).Проблема в том, что я всегда получаю сообщение об ошибке (событие onerror запускается, а responseText всегда имеет значение null), я использую fiddler для проверки ответа службы, и я, кажется, прав (я вижу возвращение объекта json),это происходит только в IE8 при использовании XDomainRequest, и та же функциональность, реализованная в JQuery, работает нормально.

Любая подсказка приветствуется.Спасибо!

PS: Это мой код JavaScript:

.....
  if (jQuery.browser.msie && window.XDomainRequest) {
    //Use Microsoft XDR
    var xdr = new XDomainRequest();
    xdr.open("post", url);
    xdr.onload = function () {
       alert("Loading");
       alert(xdr.responseText);
    };
    xdr.onsuccess = function() {
       alert("Success!");
       alert(xdr.responseText);
    };
    xdr.onerror = function() {
       alert("Error!");
       alert(xdr.responseText);
    };
    xdr.onprogress = function() {
       alert("Progress");
       alert(xdr.responseText);
    };
    xdr.timeout = 1000;
    xdr.send("data: " + escape(data));
    var response = xdr.responseText;
 } else .....

Ответы [ 4 ]

8 голосов
/ 20 января 2011

Вы уверены, что служба отправляет заголовок Access-Control-Allow-Origin , соответствующий запрашиваемому URL-адресу?

7 голосов
/ 09 февраля 2011

Возможно, ваша проблема связана с типом содержимого, так как XDomainRequest поддерживает только "text / plain".

Ссылка: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

Cheers,

Andre Pedroso

4 голосов
/ 28 марта 2012

Годовалый пост ,, ты еще там GiaNU ?!Вы вызываете xdr.onsuccess, но я не думаю, что этот метод существует.Xdr.onload работает и, по-видимому, эквивалентен AJAX-функции jQuery «success».

Этот материал X-Domain является довольно новым, но теперь у MS есть очень хорошая рабочая модель: AJAX- Введение междоменного запроса (XDR)

xdr.ontimeout Я не могу что-то сделать, но пока не вижу в этом необходимости :) Я все начал и запустил сначала/ jQuery и теперь с ie9 благодарю сообщение MS.

XDR имеет некоторые проблемы с синхронизацией моего текущего приложения и просто использует время ожидания для его обработки:

xdr.onload = setTimeout( function(){ doIt( xdr.responseText ), 2000});
1 голос
/ 11 мая 2012

Еще один момент: если вы запускаете службу через Cassini, заголовок «Access-Control-Allow-Origin» не будет возвращен, поскольку Cassini не распознает это.У нас был сценарий, когда наши сервисные вызовы работали на тестовом сервере, но не работали локально.Оказывается, служба была размещена в Cassini на нашей локальной машине разработчика, но размещена в IIS на тестовом сервере.

Также здесь есть настройка web.config для всех, кому это нужно (примечание: это разрешает доступ из любого домена"*"):

  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
...