如何捕获预期的(和预期的)302 Ajax响应?

时间:2010-05-05 02:39:06

标签: ajax redirect google-chrome xmlhttprequest http-status-code-302

因此,如果您回顾一下有关Exchange自动发现的previous question,您会发现获取自动发现网址的简便方法是发送一个非安全,未经过身份验证的GET请求到服务器,ala:

http://autodiscover.exchangeserver.org/autodiscover/autodiscover.xml

服务器将使用Location标题中的正确网址进行302重定向回复。

我正在使用Chrome扩展程序尝试一些非常简单的东西,我有:

if (req.readyState==4 && req.status==302) {
    return req.getResponseHeader("Location");
}

使用完整的XML Post和用户凭据设置另一个ajax调用

但是,此时Chrome就会挂起,看看开发人员面板显示它没有返回响应,而是表现得没有给出响应,同时显示

Uncaught Error: NETWORK_ERR: XMLHttpRequest Exception 101

在错误日志中。

我看到它的方式,参考确切的响应状态与“捕获”大致相同,但我不确定Chrome / WebKit是否存在问题,或者这是XHR请求始终处理重定向的方式。

我不知道如何抓住这个,以便我可以从响应中获得标题。

或者是否可以设置辅助XHR,以便当它获得302时,它会发送完全不同的请求?

快速更新

我刚刚更改了它,因此它没有检查响应代码:

if (req.readyState==4) {
    return req.getResponseHeader("Location");
}

而当我提醒它的值为null时。并且在开发控制台中仍然存在相同的错误和响应。所以它似乎要么不跟踪302响应作为响应,要么在擦除响应之后发生了什么?

1 个答案:

答案 0 :(得分:3)

请参阅the w3c docs on xhr:XHR将透明地遵循重定向或返回网络错误(就像您从Chrome中看到的那样),具体取决于重定向的目标是否与原始请求位于同一来源。因此,您的代码根本没有机会捕获302响应。这就是“Location”响应标头未设置的原因:此时,您正在检查最终响应的标头,而不是302响应。