0

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

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。

提前致谢 !

4

1 回答 1

2

不幸的是,XHR 将跟随 301 并返回重定向页面的内容。您可以在此处查看 W3C 记录的行为

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

所以基本上,您的请求是透明地遵循 301。浏览器会自动重定向,您无法执行您打算执行的操作。如果您可以控制 Web 服务器,则可以更改此设置(尽管违反大多数建议)。

希望这可以帮助!

于 2012-05-14T01:24:17.887 回答