我遇到了问题...我使用jQuery ajax来调用返回XML的Web服务。除了ie之外,jQuery ajax的东西对每个浏览器都很棒。
因此对于ie浏览器,我使用的是XDomainRequest。这是代码:
if ($.browser.msie && window.XDomainRequest) {
// Use Microsoft XDR
var xdr = new XDomainRequest();
xdr.open("get", theUserUrl);
xdr.timeout = 95000;
xdr.onerror = function () {
console.log('we have an error!');
}
xdr.onprogress = function () {
console.log('this sucks!');
};
xdr.ontimeout = function () {
console.log('it timed out!');
};
xdr.onopen = function () {
console.log('we open the xdomainrequest');
};
xdr.onload = function () {
// XDomainRequest doesn't provide responseXml, so if you need it:
var xml2 = new ActiveXObject("Microsoft.XMLDOM");
xml2.async = false;
xml2.loadXML(xdr.responseText);
console.log('do we get any response text at all?: ' + xdr.responseText);
ParseOwnershipObjects(xml2);
//AddServiceRequestsToMap(xml2, map, spinner);
};
xdr.send();
}
这个确切的代码在应用程序的其他地方工作正常 不同的网址。
网址很好,它会在浏览器中返回它应该的内容 (以及为什么jquery ajax调用工作)。几件事情 注意:
我正在将自己的html / javascript与另一个人的asp.net集成 项目
在global.asax.cs
文件中,我有:
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,OPTIONS");
}
所以我不认为这是一个标题问题。
我的处理人员都没有开火。不是onprogress,ontimeout,onerror ......什么都没有! 我没有时间将Web服务转换为JSON。
有什么想法吗?
谢谢!
答案 0 :(得分:2)
免责声明 - 我实际上没有使用'XDomainRequest' - 使用jQ时我将数据设置为jsonp
以获取xdomain请求...
调试时 - 您使用IE开发工具(F12
)吗?如果没有,则错误可能是console.log
编辑:
mea culpa,忽视了jsonp
的东西 - 错过了你提到的部分XML
更新
出于好奇,我正在尝试XDomainRequest
。我复制了您的代码,只为theUserUrl
添加了一个值。
如上所述/预期,除非我运行Internet Explorer Developer工具,console
为undefined
- 并且可能会给人留下“没有任何处理程序正在解雇”的印象。
启用IE开发工具(停靠或以其他方式)xdr.onerror
后会触发。 IE控制台中记录了we have an error
。因此,当 错误时,处理程序会触发。
快速阅读XDomainRequest
要求响应服务器拥有 Access-Control-Allow-Origin 标头。我正在调用我自己的服务器而且我知道我不设置了此标头,因此无需进一步调试,这将是一个很好的猜测,这就是xdr.onerror
被解雇的原因。
答案 1 :(得分:1)
事实证明,url参数中有一些特殊字符未被XDomainRequest对象正确处理。而不是GET请求,我将在仅限Internet Explorer的查询上使用POST请求。
编辑 - 我最终将Web服务切换为以JSON格式返回输出,从而无需使用XDomainRequest。使用JSON可以加快速度,我推荐它!