ОБНОВЛЕНИЕ: Я настоятельно рекомендую не вкладывать деньги в XDomainRequest, потому что это очень плохая реализация со многими ограничениями. Он в основном работает только для запросов GET для серверов, отличных от ssl, поэтому вы также можете использовать jsonp или что-то еще.
Я использую CORS для вызова API перекрестного домена, однако Internet Explorer дает проблемы. CORS должен быть возможен в IE8 и IE9 через объект XDomainRequest
, однако я не могу заставить работу работать.
JQuery отказывается, чтобы предоставить встроенную поддержку XDomainRequest, однако нескольким плагинам jQuery предлагается добавить эту поддержку. Эта тема предлагает два таких плагина: jQuery.XDomainRequest.js и xdr.js, о котором сообщалось. Afaik, плагины должны автоматически переопределять поведение jQuery.ajax
. Я нашел еще один плагин здесь.
Я разместил небольшие демо-страницы с соответствующими плагинами jQuery.XDomainRequest и xdr и jquery.ie.cors, которые выполняют запросы ajax на сервере с поддержкой CORS. Страницы работают в Chrome и Firefox, однако IE8/9 мгновенно бросает отклоненную разрешенную ошибку (даже до подачи запроса). Этот сообщение MSDN предлагает добавить другого обработчика xhr.onprogress = function() {};
, но я пробовал это, и он тоже не работает.
Любые подсказки, что я делаю неправильно? Я также тестировал с IE8 теперь с использованием виртуального сервера MS, но он имеет точно такую же проблему.
Изменить: ОК, поэтому я понял, что часть проблемы заключалась в том, что я использовал POST поверх HTTPS. По-видимому, XDomainRequest не разрешает CORS через HTTPS. Я могу переключиться на HTTP, но мне действительно нужен POST.
Edit2: см. эту проблему в github для завершения этой истории. Оказывается, при использовании HTTP POST xDomainRequest может кодировать тело запроса (аргументы) только как text/plain
. Это в значительной степени делает его бесполезным, потому что каждый использует application/x-www-form-urlencoded
или multipart/form-data
.