Кросс-субдомен AJAX работает в Chrome, а не в IE

У меня есть локальная сборка моего сайта, работающая на local.mydomain.com. Я делаю ajax-запросы на api.mydomain.com, который работает на сервере AWS и возвращает JSON. В Chrome я могу назвать API без проблем. Но в IE я получаю Access Denied.

После исследования, похоже, это кросс-суб-доменное ограничение. Но у меня создалось впечатление, что это ограничение применимо к обоим браузерам. Кто-нибудь может понять, что здесь может быть неправильным, и почему это может работать в некоторых браузерах, а не в других?

Ответ 1

Похоже, проблема была в транспортном объекте, который IE8 + хочет использовать. jQuery использует либо ActiveXObject (для IE), либо XMLHttpRequest (все остальные), но для IE8 и выше требуется XDomainRequest для ajax.

Что вы можете сделать, так это вернуть пользовательский объект xhr через $.ajaxSettings.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/

Определенно взгляните на это, если вы считаете, что испытываете ту же проблему.