Удаленный сервер межсетевого домена JQuery ajax() не работает в IE8

У меня есть script, который делает запрос ajax удаленному серверу, который возвращает текстовый ответ. Он отлично работает во всех браузерах, кроме IE8 (шокер).

Здесь код:

$.ajax({
  url: 'abc.com/?somerequest=somevalue',
  cache: false,
  type: 'POST',
  data:{
    sub: 'uploadprogress',
    uploadid: this.uploadId
  },
  dataType: 'html',
  success: this.uploadProgressResp,
  error: this.errorResp
});

В IE8 он возвращает ошибку "Нет транспорта". Я полагаю, потому что IE8 не разрешает запросы на междоменные запросы?

ПРИМЕЧАНИЕ. Я не писал API для удаленного сервера. Если бы я это сделал, я бы ответил на ответ JSON, а не на обычный текстовый ответ. Так что да, тип данных должен быть HTML, а не JSON.

RANT: Я ненавижу IE и желаю исчезнуть с лица земли

Ответ 2

Попробуйте добавить это где-то перед ajax-вызовом. Лучшее место для него - до выполнения любого другого JavaScript!

jQuery.support.cors = true;

Без этого в Internet Explorer будет выведена ошибка "Нет транспорта". Само сообщение об ошибке довольно запутанно, но по умолчанию межсетевые запросы ajax блокируются IE, но не кажутся такими другими браузерами - или, по крайней мере, Chrome и Firefox будут работать с этим эффектом.

Я разделял вашу боль в этом, исторически. Уверен, что он будет сортировать вашу проблему.

Ответ 3

Я знаю, что это очень старый вопрос, но, к сожалению, люди все еще используют IE8/9, и иногда мы должны их поддерживать:/

Это лучшее решение, которое я смог найти для этой проблемы:

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

Просто включите в свой html script и что вам не нужно ничего изменять в запросе jQuery

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js"></script>

Ограничения:

  • IE6/7 не поддерживается, только IE8 и IE9
  • Минимальная версия jQuery - 1,5
  • При использовании метода POST в IE8/9 заголовок Content-Type всегда будет установите text/plain
  • Текущий веб-сайт и запрашиваемый URL должны использовать один и тот же протокол (HTTP- > HTTPS или HTTPS- > HTTP-запросы не будут работать)