2

我在 local.mydomain.com 上运行了我的站点的本地版本。我正在向在 AWS 服务器上运行并返回 JSON 的 api.mydomain.com 发出 ajax 请求。在 Chrome 中,我可以调用 API 没有问题。但在 IE 中,我得到拒绝访问。

经过研究,似乎是跨(子)域限制。但我的印象是这个限制将适用于两种浏览器。任何人都可以看到这里可能出了什么问题,以及为什么它可能在某些浏览器中运行而不是在其他浏览器中运行?

4

1 回答 1

7

看起来问题出在 IE8+ 希望您使用的传输对象中。jQuery 使用 ActiveXObject(用于 IE)或 XMLHttpRequest(所有其他),但 IE 8 及更高版本需要用于 ajax 的 XDomainRequest。

你可以做的是像这样通过 $.ajaxSettings.xhr 返回一个自定义的 xhr 对象,

// override xhr for browser that use XDR
if ('XDomainRequest' in window && window.XDomainRequest !== null) {

  // override default jQuery transport
  jQuery.ajaxSettings.xhr = function() {
      try { return new XDomainRequest(); }
      catch(e) {
        console.log('test'); 
      }
  };

  // also, override the support check
  jQuery.support.cors = true;
}

我从这里的主题讨论中提取了这段代码:http: //graphicmaniacs.com/note/getting-a-cross-domain-json-with-jquery-in-internet-explorer-8-and-later/

如果您认为自己遇到了同样的问题,请务必查看一下。

于 2012-06-28T21:44:09.390 回答