Следующее работает во всех браузерах, кроме IE (я тестирую в IE 9).
jQuery.support.cors = true;
...
$.ajax(
url + "messages/postMessageReadByPersonEmail",
{
crossDomain: true,
data: {
messageId : messageId,
personEmail : personEmail
},
success: function() {
alert('marked as read');
},
error: function(a,b,c) {
alert('failed');
},
type: 'post'
}
);
У меня есть еще одна функция, которая использует dataType: 'jsonp'
, но мне не нужны данные, возвращаемые этим вызовом AJAX. Мое последнее средство - вернуть какую-нибудь треп, обернутую в JSONP, чтобы заставить его работать.
Есть идеи, почему IE облажается с запросом CORS, который не возвращает данных?
Ответы:
Это известная ошибка jQuery. Команда jQuery «не планирует поддерживать это в ядре и лучше подходит как плагин». (См. Этот комментарий ). IE не использует XMLHttpRequest , а использует альтернативный объект с именем XDomainRequest .
Там является плагин для поддержки этого в JQuery, который можно найти здесь : https://github.com/jaubourg/ajaxHooks/blob/master/src/xdr.js
РЕДАКТИРОВАТЬ Функция
$.ajaxTransport
регистрирует фабрику транспортеров. Переносчика используется внутри по$.ajax
для выполнения запросов. Поэтому я предполагаю, что вы сможете звонить$.ajax
как обычно. Информацию о транспортерах и расширении$.ajax
можно найти здесь .Также здесь можно найти, возможно, лучшую версию этого плагина .
Два других примечания:
Изменить 2: проблема http в https
Источник: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
источник
http
наhttps
), доменов (google.com
наbing.com
), субдоменов (mail.google.com
наmaps.google.com
) или протоколов (google.com:80
- порт по умолчанию наgoogle.com:8080
) вызовет «междоменный» запрос. По сути, все, что находится перед первым/
в вашем URL, должно быть идентичным.Основываясь на принятом ответе @dennisg, я успешно выполнил это, используя jQuery.XDomainRequest.js от MoonScript.
Следующий код работал правильно в Chrome, Firefox и IE10, но не работал в IE9. Я просто включил скрипт, и теперь он автоматически работает в IE9. (И, наверное, 8, но я не тестировал.)
источник
Полные инструкции о том, как это сделать с помощью плагина "jQuery-ajaxTransport-XDomainRequest", можно найти здесь: https://github.com/MoonScript/jQuery-ajaxTransport-XDomainRequest#instructions
Этот плагин активно поддерживается и обрабатывает HTML, JSON и XML. Файл также размещен на CDNJS, поэтому вы можете напрямую перетащить скрипт на свою страницу без дополнительной настройки: http://cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.1/jquery.xdomainrequest .min.js
источник
Проблема в том, что IE9 и ниже не поддерживают CORS. XDomainRequest поддерживает только GET / POST и
text/plain
тип содержимого, как описано здесь: http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspxПоэтому, если вы хотите использовать все HTTP-глаголы и / или json и т. Д., Вам нужно использовать другое решение. Я написал прокси, который плавно перейдет на прокси, если используется IE9 или меньше. Вам вообще не нужно менять свой код, если вы используете ASP.NET.
Решение состоит из двух частей. Первый - это сценарий jquery, который подключается к обработке jQuery ajax. Он автоматически вызовет веб-сервер, если выполняется запрос между доменами и браузер IE:
На своем веб-сервере вы должны получить запрос, получить значение из HTTP-заголовка X-CorsProxy-Url, выполнить HTTP-запрос и, наконец, вернуть результат.
Сообщение в моем блоге: http://blog.gauffin.org/2014/04/how-to-use-cors-requests-in-internet-explorer-9-and-below/
источник
Я просто делал все запросы JSONP, потому что это было единственное решение для всех наших поддерживаемых браузеров (IE7 + и постоянных клиентов). Имейте в виду, что ваш ответ технически работает для IE9, поэтому у вас есть правильный ответ.
источник
Основываясь на решении MoonScript, вы можете попробовать следующее:
https://github.com/intuit/xhr-xdr-adapter/blob/master/src/xhr-xdr-adapter.js
Преимущество заключается в том, что, поскольку это решение более низкого уровня, оно будет включать CORS (насколько это возможно) в IE 8/9 с другими фреймворками, а не только с jQuery. Я успешно использовал его с AngularJS, а также с jQuery 1.x и 2.x.
источник
Получение междоменного JSON с помощью jQuery в Internet Explorer 8 и более новых версиях
Очень полезная ссылка:
http://graphicmaniacs.com/note/getting-a-cross-domain-json-with-jquery-in-internet-explorer-8-and-later/
Может помочь с проблемой возврата json из запроса домена X.
Надеюсь, это кому-то поможет.
источник
Чтобы решить эту проблему, также проверьте, есть ли у вас какие-либо включенные .js в ваш файл ajax с именем: Я получил ошибку отказа в доступе при включении shadowbox.js в мой ajax.php
источник
Я тестировал веб-службу CORS на своей машине разработчика и получал сообщение об ошибке «Доступ запрещен» только в IE. Firefox и Chrome работали нормально. Оказывается, это было вызвано тем, что я использовал localhost в вызове ajax! Итак, мой URL-адрес браузера был примерно таким:
Http: //my_computer.my_domain.local/CORS_Service/test.html
и мой вызов ajax внутри test.html был примерно таким:
Все заработало, когда я изменил вызов ajax, чтобы использовать IP-адрес моего компьютера вместо localhost.
Вкладка «Сеть» окна инструментов разработчика IE также показывает запрос CORS Preflight OPTIONS, за которым следует XMLHttpRequest GET, что я и ожидал увидеть.
источник
Обновление от начала 2015 года. XDomain - широко используемая библиотека для поддержки CORS в IE9 с ограниченным дополнительным кодированием.
https://github.com/jpillora/xdomain
источник
Попробуйте использовать плагин jquery-transport-xdr jQuery для запросов CORS в IE8 / 9.
источник
Примечание - Примечание
не используйте « http://www.domain.xxx », « http: // localhost / » или «IP >> 127.0.0.1» для URL-адреса в ajax. используйте только путь (каталог) и имя страницы без адреса.
ложное состояние:
истинное состояние:
источник