【问题标题】:how to programmatically enable data sources across domains in browser.?如何以编程方式在浏览器中跨域启用数据源。?
【发布时间】:2015-08-26 13:16:50
【问题描述】:

我在我的脚本中使用$.ajax() 函数,该函数从其他域调用Web 服务。但我在 IE 中遇到错误。然后经过研究,我知道错误是由于 Internet Explorer 默认设置为"Access data sources across domains" to "prompt"。如何使用脚本设置"Enable"..?

代码:

var serviceURL = "https://www.other-domain.com/webservice/showbills?billID=12458";

if ($.browser.msie && window.XDomainRequest) {

    var xhr = new XMLHttpRequest();
    xhr.onreadystatechange = function () {
       if (xhr.readyState == 4) {
      var data = xhr.responseText;                                  
          var xmlDoc = $.parseXML(data); // then parse into xml
          var xml = $(xmlDoc); // create doc
          console.log(xml);
          // show bill here in table.
       }
    }
 xhr.open('POST', serviceURL, true);
 xhr.send();

} else {

    $.ajax({
        type: "POST",
        url: serviceURL,
        dataType: "text",
        crossOrigin: true,
        crossDomain: true,
        success: function (data) {
           var xmlDoc = $.parseXML(data); // then parse into xml
           var xml = $(xmlDoc);// create doc
           console.log(xml);
        // show bill here in table.
        }
   });
}

这在浏览器中出现错误。

我收到SEC7120: Origin http://localhost:8080 not found in Access-Control-Allow-Origin headerSCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied

【问题讨论】:

    标签: javascript ajax internet-explorer browser


    【解决方案1】:

    Microsoft 为 Internet Explorer 中的跨域 AJAX 请求创建了自己的解决方案,称为 XDomainRequest。

    有一个 jQuery 插件支持这个:https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

    你只需要在包含 jQuery 之后包含这个脚本,然后它就可以工作了。

    【讨论】:

    • 这仅适用于 IE8 和 IE9。他们在那里的网站上提到过。我只是解析从其他域收到的 XML 的任何其他方式。
    • 是的,我知道,但您没有提及您使用的 IE 版本。 IE10 及更高版本实际上不需要这种解决方法。您正在测试哪个 IE 版本?
    • 我们的网站应该可以在所有IE浏览器中运行。目前我使用的是 IE 10。我已经更新了问题。
    • 哦,我明白了。尝试以下操作:在服务器响应头中添加:Access-Control-Allow-Origin: *
    • 由于无法使用 JavaScript 覆盖客户端的安全设置,因此我只能想到这一点。抱歉:(。另一种解决方案是在您自己的服务器上创建一个 Web 服务,该服务从其他服务器调用 Web 服务并返回结果。就像假设您的网站在 mydomain.com 上运行,而不是通过 @ 调用该服务987654322@ 你通过 mydomain.com/webservice/showbills?billID=12458 调用它,然后从 other-domain.com 调用服务并返回结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多