Межсубдоменный AJAX работает в Chrome, а не в IE

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

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


person Thomas    schedule 21.06.2012    source источник


Ответы (1)


Похоже, проблема была в транспортном объекте, который IE8+ хочет, чтобы вы использовали. jQuery использует либо ActiveXObject (для IE), либо XMLHttpRequest (все остальные), но IE 8 и выше требует 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/

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

person Thomas    schedule 28.06.2012