Междоменный запрос POST ajax в Internet Explorer

Я использую jQuery 1.7.2 и хочу сделать запрос POST другому домену. Это должен быть запрос POST. Но это делает не работать в Internet Explorer (я пробовал IE9); он работает во всех других браузерах.

У меня есть этот script:

<script>
jQuery.support.cors = true;

jQuery(function() {
    $.ajax({
        crossDomain : true,
        cache: false,
        type: 'POST',
        url: 'http://someotherdomain/test.php',
        data: {},
        success: function(da) {
            console.log(JSON.stringify(da))
        },
        error: function(jqxhr) {
            console.log('fail') 
            console.log(JSON.stringify(jqxhr))
        },
        dataType: 'json'
    });
});
</script>

Я возвращаю ошибку:

{"readyState":0,"status":0,"statusText":"Error: Access denied.\r\n"}

Мой PHP файл выглядит так:

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, DELETE, PUT, OPTIONS');
echo json_decode(array('success' => 'yes'));

Ответы

Ответ 1

Internet Explorer (включая IE9) не поддерживает CORS. Вы должны проксировать весь свой запрос на междоменное соединение (сообщение в PHP script в том же домене, которое отправляет с завивкой ваш запрос и возвращает ответ)

Ответ 2

Для поддержки CORS в IE < 10, вы должны изменить метод ajax для использования объекта XDomainRequest. Этот плагин делает это для вас: https://github.com/jaubourg/ajaxHooks

Ответ 3

Ваш script выглядит правильно, но я считаю, что вам нужно изменить:

header('Access-Control-Allow-Origin: *');

к

header('Access-Control-Allow-Origin: x-requested-with');

или

header('Access-Control-Allow-Origin: {Origin}');

Где {Origin} - значение заголовка Origin. Я понимаю, что просто положить '*' не будет работать, если источник был дан.

Кроме того, IE8 и IE9 имеют ограниченную поддержку для этого, но он работает, если вы поместите jQuery.support.cors = true, как вы это сделали.

Ответ 4

Это работает в IE9.

<!DOCTYPE html>
<head>
<script language="javascript" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script language="javascript" type="text/javascript">
var url = "http://msdn.microsoft.com/en-us/library/windows/desktop/ms759148(v=vs.85).aspx";
function getRequest() {
    try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
    catch (e) {alert("Error while getting 6.0");}
    try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
    catch (e) {alert("Error while getting 3.0");}
    try { return new ActiveXObject("Microsoft.XMLHTTP"); }
    catch (e) {alert("Error while getting 2.0");}
    throw new Error("This browser does not support XMLHttpRequest.");
};
var request = getRequest();
request.open("POST", url, false);
request.send();
alert("Content from :"+url+":"+ request.responseText);
</script>
</head>
<h1>AJAX ActiveX</h1>