我正在尝试使用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 .....
答案 0 :(得分:8)
您确定该服务正在发送与请求网址匹配的 Access-Control-Allow-Origin 标头吗?
答案 1 :(得分:7)
您的问题可能是发送的内容类型,因为XDomainRequest仅支持“text / plain”。
干杯,
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>