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

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

所以,如果你回头看看我的previous question关于 Exchange 自动发现,您会发现获取自动发现 URL 的最简单方法是向服务器发送不安全、未经身份验证的 GET 请求,ala:

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

服务器将响应 302 重定向,并在 Location header 中包含正确的 URL。

我首先尝试使用 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 请求始终处理重定向的方式。

我不知道如何捕获这个,以便我仍然可以从响应中获取 header 。

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

快速更新

我刚刚更改了它,以便它不检查响应代码:

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

相反,当我警告该值时,它是null。并且开发控制台中仍然存在相同的错误并且没有响应。所以看起来它要么不跟踪 302 响应作为响应,要么在清除该响应之后发生了一些事情?

最佳答案

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

关于ajax - 如何捕获预期(和预期)的 302 Ajax 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2770289/

相关文章:

javascript - Ajax 到 PHP 未定义索引作为数据传递 :

javascript - 如何不在node.js 中发回对ajax post 调用的响应?

wordpress - 为什么我的 WordPress 博客中的页面重定向到本地主机?

javascript - 使用后退按钮和 "sortable"表单问题恢复表单状态(Chrome 和 safari 但不是 Firefox)

javascript - 如何从两个异步函数中获取变量的值

javascript - 加载多个远程数据源以进行knockout.js数据绑定(bind)

c# - Web Http 请求失败 (500) 而 postman 成功运行 Web GET 请求

redirect - 如何设置域名以重定向到另一个 URL,然后检查来自该域的引荐来源网址?

css - Chrome : transform scale doesn't work in combination with filter blur while unrelated element is using transform with transition

google-chrome - 当 transport=serverSentEvents 时不调用 SignalR 客户端函数