Ajax请求但没有内容

时间:2012-05-14 00:45:45

标签: javascript ajax http request

我正在尝试创建一个Ajax请求,然后解析响应标头以获取“Location”属性。这是我的代码:

var request = new XMLHttpRequest();
request.onreadystatechange = function() {
    if(request.readyState == 4 && request.status == 301) {
        alert('test');
        var header = request.getResponseHeader('Location');
        console.log(header);
    }
}
request.open('GET', hrefAttr, true);
request.send(null);

问题是由于某种原因,请求被发送并且响应也被接收(在Firebug中红色“GET”请求+响应),但是我没有得到任何“测试”警报,也没有任何文本在firebug中控制台。

编辑:这是修改后的代码:

var request = new XMLHttpRequest();
request.onreadystatechange = function() {
console.log(request.readyState);
    if(request.readyState <= 3 && request.status == 301) {
        alert('test');
        var header = request.getResponseHeader('Location');
        console.log(header);
    }
    else if (request.readyState == 0 && request.status == 301) {
        alert('state0');
    }
}
request.open('GET', hrefAttr, true);
request.send();

console.log(request.readyState)给出了这个状态序列:1,1,2,4。

在Firebug控制台选项卡中,Http Request + Response显示正常但红色(如果这意味着什么)。

不知道我为什么不工作...... 编辑:我正在使用Firefox。

提前致谢!

1 个答案:

答案 0 :(得分:2)

不幸的是,XHR将遵循301并返回重定向页面的内容。您可以在W3C here.

中看到记录的行为
  

如果XMLHttpRequest源和请求URL的来源是相同的源,则在观察同源请求事件规则时透明地遵循重定向。

所以基本上,你的请求是透明地跟随301。浏览器会自动重定向,您无法执行您想要执行的操作。如果您可以控制Web服务器,则可以更改(尽管可以反对大多数建议)。

希望这有帮助!