IE8 AJAX GET setRequestHeaders не работает, если в URL не указаны параметры - PullRequest
3 голосов
/ 17 апреля 2010

Я пытаюсь создать запрос AJAX в IE8.

var xhr = new ActiveXObject( 'Msxml2.XMLHTTP' );
xhr.open( 'GET', '/ajax/' );
// Required header for Django to detect AJAX request
xhr.setRequestHeader( 'X-Requested-With', 'XMLHttpRequest' );
xhr.onreadystatechange = function() {
   if ( this.readyState == 4 ) console.log(this.responseText); 
}
xhr.send( null );

Это прекрасно работает в Firefox, Chrome, Safari. В IE8, однако, все мои тестовые запросы AJAX работают, КРОМЕ для тех, где я выполняю GET без каких-либо параметров строки запроса (например, выше) POST работают без вопросов, а запросы GET работают только тогда, когда я включаю строки запроса в URL, например:

xhr.open( 'GET', '/ajax/?foo=bar' )

Я также на 110% уверен, что мой серверный код обрабатывает эти запросы надлежащим образом, так что это полностью меня озадачивает.

Кто-нибудь знает, что может быть причиной этого?

1 Ответ

0 голосов
/ 05 декабря 2010

Стандарты указывают, что GET запросы имеют (а) параметры запроса. Я предполагаю, что в этом случае MSIE8 работает надлежащим образом, а другие браузеры «позволяют ему скользить».

Если вы намереваетесь загрузить страницу, вы можете отправить запрос GET в файл, который затем включает / freads / независимо от файла содержимого и отправляет его обратно. В этом случае у вас будет промежуточный файл, содержащий любую страницу, отправляемую в качестве параметра (например, ?foo=bar.)

В любом случае, я бы использовал jQuery для выбора соответствующего HTTP-объекта, иначе вам придется сделать что-то подобное для полной совместимости:

var XMLHttpArray = [                        
    function() {return new XMLHttpRequest();},
    function() {return new ActiveXObject("Msxml2.XMLHTTP");},
    function() {return new ActiveXObject("Msxml2.XMLHTTP");},
    function() {return new ActiveXObject("Microsoft.XMLHTTP");}     
];

function XMLHTTPObject(){   
    var xmlhttp = false;
    for(var i=0; i<XMLHttpArray.length; i++){
            try{
                    xmlhttp = XMLHttpArray[i]();
            }catch(e){
                    continue;
            }
            break;
    }
    return xmlhttp;     
};

var http = XMLHTTPObject();
http.open(...);
...