XDomainRequest问题

时间:2011-01-19 18:53:00

标签: javascript ajax xdomainrequest

我正在尝试使用XDomainRequest(IE8)对返回json的服务进行异步调用。问题是我总是得到一个错误(onerror事件被触发,而responseText总是为null),我正在使用fiddler检查服务的响应,我似乎是对的(我可以看到json对象的返回),这只发生在IE8中,当使用XDomainRequest时,JQuery中实现的相同功能可以正常工作。

任何线索都将不胜感激。谢谢!

P.S。:这是我的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 个答案:

答案 0 :(得分:8)

您确定该服务正在发送与请求网址匹配的 Access-Control-Allow-Origin 标头吗?

答案 1 :(得分:7)

您的问题可能是发送的内容类型,因为XDomainRequest仅支持“text / plain”。

参考: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx

干杯,

Andre Pedroso

答案 2 :(得分:4)

一岁的帖子,你还在那里GiaNU?! 您正在调用xdr.onsuccess但我不认为该方法存在。 xdr.onload工作,似乎等同于jQuery的AJAX“成功”功能。

这个X-Domain的内容很新,但现在MS提供了一个非常好的工作模型:AJAX - Introducing Cross-domain Request (XDR)

xdr.ontimeout我无法做一件事,但还没有找到需要:) 我得到了第一个w / jQuery并且现在用ie9感谢MS帖子。

XDR在我当前应用程序的时机方面遇到了一些问题,只是使用了超时来处理它:

xdr.onload = setTimeout( function(){ doIt( xdr.responseText ), 2000});

答案 3 :(得分:1)

另一个问题是,如果您通过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>