jQuery .ajax在IE8 / 9中的跨域请求中拒绝访问

时间:2014-03-19 22:44:05

标签: javascript jquery ajax internet-explorer-8 internet-explorer-9

我正在使用jQuery的.ajax将内容从其他页面拉入模态窗口。这些页面中的大多数位于同一个域中,并且可以在所有浏览器中正常运行。

有一个链接转到另一个域。该链接在Chrome,Firefox和Safari中正常运行,但在Internet Explorer 8和9中提供了“拒绝访问”错误。

我搜索了很多解决方案并尝试了迄今为止没有帮助的几件事,包括:

  • 我确认Access-Control-Allow-Origin设置为允许我的域名。我尝试将它设置为" *"以及确认这不是问题。
  • 我尝试使用不同的jQuery方法来进行AJAX调用。我使用了jQuery的load,get和ajax方法。 jQuery的ajax方法给了我Access Denied错误。
  • 我尝试使用Internet Explorer的XDomainRequests。 XDomainRequests告诉我有一个错误,但没有给我更多的信息。我尝试了对此代码进行了多处更改,我发现了一些建议,就像在send函数上设置超时但没有更改。
  • 我设置了jQuery.support.cors = true;并在我的.ajax调用中添加了crossDomain:true。
  • 我发现有人建议jQuery版本1.8.0导致问题恰好是我正在处理的网站上使用的版本。他们的建议是回到1.7.2版,但没有解决问题。我也尝试过更改为1.11.0版,但这也没有什么区别。
  • 我看到添加&回调=的建议?到网址的末尾会解决它,但这并没有什么区别。

我可能忘记了今天尝试过的东西,但这应该是其中的大部分内容。

这是我目前的代码:

jQuery.support.cors = true;

      var request = $.ajax(
      {
        crossDomain: true,
        type: "GET",
        url: url,
        success: function () {
          console.log('success');
        },
        error: function (a, status, error) {
          console.log('error: ' + error);
        },
        complete: function () {
          console.log('complete');
        }
      });

Chrome,Firefox和Safari记录成功'并且'完成'在控制台中。 IE8 / 9 log'错误:错误:访问被拒绝。'并且'完成'在控制台中。

2 个答案:

答案 0 :(得分:1)

前几天我遇到了类似的问题。这就是我尝试过的,它就像一个魅力

我将属性dataType设置为jsonp(即dataType:' jsonp')这适用于GET但不适用于POST

如果上述内容仍然不起作用,那么您可以从MoonScript引用以下脚本并自动挂起支持

https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest

答案 1 :(得分:0)

我用它来让Internet Explorer在跨域ajax调用上工作。我也很乐意在这里列出我的解决方案,但我认为下面的链接可能从一个比我更聪明的用户详细解释。

Jquery $.ajax fails in IE on cross domain calls