IE8 AJAX GET setRequestHeaders无效,除非URL中提供了params

时间:2010-04-17 06:12:08

标签: 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() {
   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%肯定我的服务器代码正确处理这些请求,所以,这完全让我感到困惑。

有没有人知道可能导致这种情况的原因?

1 个答案:

答案 0 :(得分:0)

标准指定GET个请求具有(a)查询参数。我的猜测是,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(...);