我正在尝试创建一个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。
提前致谢!
答案 0 :(得分:2)
不幸的是,XHR将遵循301并返回重定向页面的内容。您可以在W3C here.
中看到记录的行为如果XMLHttpRequest源和请求URL的来源是相同的源,则在观察同源请求事件规则时透明地遵循重定向。
所以基本上,你的请求是透明地跟随301。浏览器会自动重定向,您无法执行您想要执行的操作。如果您可以控制Web服务器,则可以更改(尽管可以反对大多数建议)。
希望这有帮助!