8

我正在尝试对使用 XDomainRequest (IE8) 返回 json 的服务进行异步调用。问题是我总是得到一个错误(onerror 事件被触发,并且 responseText 总是为空),我正在使用 fiddler 检查服务的响应,我看起来是正确的(我可以看到 json 对象返回),这仅在使用 XDomainRequest 时在 IE8 中发生,在 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

4 回答 4

8

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

于 2011-01-19T21:06:25.203 回答
7

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

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

干杯,

安德烈·佩德罗索

于 2011-02-09T17:40:29.587 回答
4

一年前的帖子,你还在吗?您正在调用 xdr.onsuccess 但我认为该方法不存在。xdr.onload 有效,似乎等同于 jQuery 的 AJAX“成功”功能。

这个 X 域的东西是相当新的,但是现在可以从 MS 那里获得一个非常好的工作模型:AJAX - 引入跨域请求(XDR)

xdr.ontimeout 我无法做任何事情,但还没有找到需要:) 我首先使用 jQuery 启动并运行,现在使用 ie9 感谢 MS 帖子。

XDR 对我当前应用程序的计时有一些问题,只是使用超时来处理它:

xdr.onload = setTimeout( function(){ doIt( xdr.responseText ), 2000});
于 2012-03-27T23:33:44.590 回答
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>
于 2012-05-11T12:14:27.203 回答