Javascript IE8 AJAX GET-setRequestHeaders不工作,除非URL中提供了参数

Javascript IE8 AJAX GET-setRequestHeaders不工作,除非URL中提供了参数,javascript,ajax,internet-explorer,activex,xmlhttprequest,Javascript,Ajax,Internet Explorer,Activex,Xmlhttprequest,我试图在IE8中创建一个AJAX请求 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() {

我试图在IE8中创建一个AJAX请求

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毫无疑问是有效的,只有在URL中包含查询字符串时,GET请求才有效,如下所示:

xhr.open( 'GET', '/ajax/?foo=bar' )
我还110%肯定我的服务器代码正确地处理了这些请求,所以,这让我完全难堪


有人知道是什么导致了这种情况吗?

标准规定,
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(...);
var XMLHttpArray=[
函数(){返回新的XMLHttpRequest();},
函数(){返回新的ActiveXObject(“Msxml2.XMLHTTP”);},
函数(){返回新的ActiveXObject(“Msxml2.XMLHTTP”);},
函数(){返回新的ActiveXObject(“Microsoft.XMLHTTP”);}
];
函数XMLHTTPObject(){
var xmlhttp=false;

对于(var i=0;我知道这可能不是您想要的答案,为什么不使用jquery?它承担了您对浏览器兼容性的所有责任。因此,请尝试一下。它也不会改变您的大部分代码。:)您是否尝试过使用wireshark之类的工具来确定IE是否发出HTTP请求?也就是说,您确定浏览器没有决定“嘿,我甚至不需要运行HTTP请求,因为缓存中有该URL!”@Pointy-我确保在任何更改后清除缓存并重新启动服务器。@Bipul-我正在编写自己的框架,但我喜欢jQuery=)