3

我有一个问题...我使用 jQuery ajax 调用返回 XML 的 Web 服务。jQuery ajax 的东西对除了 ie 之外的所有浏览器都非常有用。

所以对于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();
}
  • 这个确切的代码可以在应用程序的其他地方使用不同的 url 正常工作。

    url 很好,它返回的正是浏览器中的内容(以及 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。

有什么想法吗?

谢谢!

4

2 回答 2

2

免责声明 - 我实际上没有使用“XDomainRequest” - 当使用 jQ 时,我将数据设置为jsonp用于 xdomain 请求......

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

编辑:过失,无视这些jsonp东西 - 错过了你提到的部分XML


更新:

出于好奇,我正在尝试XDomainRequest。我复制了你的代码,只是为theUserUrl.

  • 如上所述/预期,除非我运行 Internet Explorer 开发工具,否则console-undefined并且可能给人的印象是“您的处理程序都没有触发”。

  • 一旦我启用了 IE 开发工具(停靠或其他),就会xdr.onerror触发。we have an error已登录 IE 控制台。因此,当出现错误时,处理程序触发

Internet Explorer 开发工具控制台

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

于 2012-05-16T00:04:07.403 回答
1

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

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

于 2012-05-16T19:37:11.523 回答