代码之家  ›  专栏  ›  技术社区  ›  ground5hark

IE8 Ajax get SuffReQuestTead不工作除非在URL中提供PARAMS

  •  3
  • ground5hark  · 技术社区  · 16 年前

    我试图在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测试请求之外,所有的Ajax测试请求都没有任何查询字符串PARAMs(如上面的一个)。posts可以毫无疑问地工作,get请求只在我在url中包含查询字符串时工作,如下所示:

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

    我也十分肯定我的服务器代码正确地处理了这些请求,所以,这完全让我难堪。

    有人知道这是什么原因吗?

    1 回复  |  直到 16 年前
        1
  •  0
  •   wanovak    15 年前

    标准规定 GET 请求具有(a)查询参数(s)。我的猜测是,在这种情况下,msie8的行为是适当的,而其他浏览器则“让它滑动”。

    如果你想加载一个页面,你可以发送一个 得到 请求一个文件,该文件随后包含/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(...);