XDomainRequest - 没有调用......没有做任何事情

时间:2012-05-15 21:35:16

标签: javascript asp.net internet-explorer xdomainrequest

我遇到了问题...我使用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。

有什么想法吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

免责声明 - 我实际上没有使用'XDomainRequest' - 使用jQ时我将数据设置为jsonp以获取xdomain请求...

调试时 - 您使用IE开发工具(F12)吗?如果没有,则错误可能是console.log

编辑: mea culpa,忽视了jsonp的东西 - 错过了你提到的部分XML


更新

出于好奇,我正在尝试XDomainRequest。我复制了您的代码,只为theUserUrl添加了一个值。

  • 如上所述/预期,除非我运行Internet Explorer Developer工具,consoleundefined - 并且可能会给人留下“没有任何处理程序正在解雇”的印象。

  • 启用IE开发工具(停靠或以其他方式)xdr.onerror后会触发。 IE控制台中记录了we have an error。因此,当 错误时,处理程序触发。

Internet Explorer Dev Tools Consoloe

快速阅读XDomainRequest要求响应服务器拥有 Access-Control-Allow-Origin 标头。我正在调用我自己的服务器而且我知道我设置了此标头,因此无需进一步调试,这将是一个很好的猜测,这就是xdr.onerror被解雇的原因。

答案 1 :(得分:1)

事实证明,url参数中有一些特殊字符未被XDomainRequest对象正确处理。而不是GET请求,我将在仅限Internet Explorer的查询上使用POST请求。

编辑 - 我最终将Web服务切换为以JSON格式返回输出,从而无需使用XDomainRequest。使用JSON可以加快速度,我推荐它!