是否可以通过 Ajax 获取页面重定向信息?

新手上路,请多包涵

如果没有 ajax,如果我们加载 http://example.com/1 并且如果它重定向到 http://example.com/2 那么浏览器将获得适当的标头并更新浏览器 URL。有没有办法通过 jQuery Ajax 获取这些信息?

例如,我通过 Ajax 请求 http://api.example.com 。在 PHP 中,此页面被重定向到 http://api2.example.com 。这东西有可能知道吗?

使用: 我有一个带有链接的导航栏。所有页面都 通过 AJAX 加载到容器中,我根据链接使用 HTML5 历史将 url 推送到浏览器栏上。

但是,如果页面被重定向,该页面会有一个新链接吗?我也想在浏览器栏中更改它。我想知道 Ajax URL 被重定向到哪里,以防它被重定向。

为什么这很重要? 我的链接处理表单数据、请求和各种身份验证。例如,如果我请求 https://oauth.example.org?code=56hycf86 它会重定向到 successfailure 页面。我的 Ajax 获得了正确的 html 内容,但 URL 浏览器栏仍然具有相同的 URL Auth ID 如果重新加载,则会产生错误。还有其他安全问题。

我不知道我是否解释正确,但感谢您的帮助。

原文由 tika 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 690
2 个回答

好吧,不幸的是,ajax 总是遵循重定向。但是,并非所有浏览器都支持一个功能,您可以访问 XMLHttpRequest 对象的 responseURL 属性。

您可以在下面的代码片段中尝试。重定向按钮将 ajax 请求发送到一个 URL,该 URL 回复 1 个重定向(如果有多个重定向,它也有效)。无重定向按钮将 ajax 请求发送到没有重定向的 URL。

据我所知,IE 11 和旧版本的 chrome/firefox/opera 浏览器不支持此方法。

 document.getElementById("no-redirect").addEventListener("click", function() {
  testRedirect("https://httpbin.org/get");
});

document.getElementById("redirect").addEventListener("click", function() {
  testRedirect("https://httpbin.org/redirect/1");
});

function testRedirect(url) {
  var xhr = new XMLHttpRequest();
  xhr.onreadystatechange = function(e) {
    if (xhr.status == 200 && xhr.readyState == 4) {
      if (url != xhr.responseURL) {
        alert("redirect detected to: " + xhr.responseURL)
      } else {
        alert("no redirect detected")

      }
    }
  }
  xhr.open("GET", url, true);
  xhr.send();
}
 <button id="redirect">
  Redirect
</button>
<button id="no-redirect">
  No Redirect
</button>

原文由 Dola 发布,翻译遵循 CC BY-SA 3.0 许可协议

这可能不是您要找的东西,但也许它会帮助您获得类似的效果。

如果您可以控制页面 http://api.example.com 所做的事情,您可以更改它在通过 AJAX 获得调用时的反应方式。

您可以在 AJAX 调用中包含一个变量,将其标记为此类调用,如果存在此变量,则不会重定向到其他页面,而是在答案中包含它将重定向到的 URL。

AJAx 调用中返回的数据可以是一个散列,其中一个键代表重定向 url。

 data = {status => 1, redirect => 'http://ap2.example.com', …}

(抱歉,如果这不是有效的 PHP 散列)

原文由 Pit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题