javascript - 除非在 URL 中提供参数,否则 IE8 AJAX GET setRequestHeaders 不起作用

标签 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 毫无疑问地工作,而 GET 请求仅在我在 URL 中包含查询字符串时才有效,如下所示:

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

我也 110% 肯定我的服务器代码正在适本地处理这些请求,所以,这完全让我难住了。

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

最佳答案

标准指定 GET 请求具有 (a) 个查询参数。我的猜测是 MSIE8 在这种情况下表现得很好,而其他浏览器正在“让它滑动”。

如果您打算加载一个页面,您可以向一个文件发送一个GET 请求,然后该文件包含/读取/任何内容文件并将其发回。在这种情况下,您将拥有一个中间文件,其中包含作为参数发送的任何页面(例如,?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(...);

关于javascript - 除非在 URL 中提供参数,否则 IE8 AJAX GET setRequestHeaders 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657464/

相关文章:

javascript - AngularJS - 指令范围中无法访问范围值

javascript - 如何将 javascript 和 css 文件添加到 magentomodule

javascript - 单击 React 组件外部时关闭菜单

javascript - Ajax 未加载

asp.net - UpdatePanel 与 'traditional' AJAX 有何不同?

javascript - 如何使用 "window.getSelection()"获取 HTML

javascript - 在提交时附加一个 CSS block

javascript - 过渡期间 AngularJS SubForm 的性能

html - 按钮在 ie 中不起作用

javascript - 如何在 Window 的嵌入式浏览器中调试 Javascript?