Разрешение AJAX отказано в IE? - PullRequest
2 голосов
/ 23 января 2011

Я пытаюсь сделать ajax-вызов во внешний домен, который уже разрешает внешние запросы, отправив заголовок Access-Control-Allow-Origin:*, но я получаю разрешение на отказ в строке xmlhttp.post().

Вот мой код:

var xmlhttp;
try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
    try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
        xmlhttp = false;
    }
}

if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
        xmlhttp = new XMLHttpRequest();
    } catch (e) {
        xmlhttp = false;
    }
}

xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        alert(xmlhttp.responseText);
    }
}

xmlhttp.open("GET", "http://www.domain.com", true);
xmlhttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xmlhttp.send();

Ответы [ 3 ]

1 голос
/ 23 января 2011

Я считаю, что в IE вы все еще не можете использовать XMLHttpRequest для междоменных запросов.Для этого вам нужно использовать XDomainRequest объект.Полная документация здесь .Я полагаю, что причина введения отдельного объекта состояла в том, чтобы позволить разработчикам выполнить тест на совместимость, прежде чем делать запрос, который, безусловно, не будет работать в старых браузерах.

0 голосов
/ 29 июня 2015

Примечание. Не используйте "http://domain.xxx" или" http://localhost/" или "IP" для URL в Ajax. Используйте только путь (каталог) и имя страницы без адреса.

ложное состояние:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST', 'http://www.example.com/dir1/dir2/page.php', true);
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

истинное состояние:

var AJAXobj = createAjax();
AJAXobj.onreadystatechange = handlesAJAXcheck;
AJAXobj.open('POST','dir1/dir2/page.php', true);   // <<--- note
AJAXobj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
AJAXobj.send(pack);

function createAjax()
{
    var ajaxHttp = null;
    try
    {
        if(typeof ActiveXObject == 'function')
            ajaxHttp = new ActiveXObject("Microsoft.XMLHTTP");
        else 
        if(window.XMLHttpRequest)
            ajaxHttp = new XMLHttpRequest();
    }
    catch(e)
    {
        alert(e.message);
        return null;
    }
    //-------------
    return ajaxHttp;
};
0 голосов
/ 23 января 2011

Я считаю, что вы можете использовать Ajax только с URL-адресом из того же домена, что и ваша вызывающая страница.Это не внешний домен, который отклоняет запрос, это безопасность вашего браузера.Взгляните на Одинаковая политика происхождения Это способ избежать кросс-браузерных сценариев - иначе представьте, что у вас есть страница, где вы можете ввести информацию о своей кредитной карте, и кто-то вводит сценарий, который отправляет информацию, которую вы вводите, навнешний сайт.Было бы большой проблемой, чтобы бороться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...