Удаленный сервер межсетевого домена 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-запросы не будут работать)