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

tik*_*ika 11 javascript ajax jquery

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

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

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

但是,如果页面被重定向,页面会有一个新的链接吗?我想在浏览器栏中更改它.我想知道在重定向的情况下重定向Ajax URL的位置.

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

我不知道我是否解释了正确的事情,但谢谢你的帮助.

Dol*_*ola 9

嗯,不幸的是,ajax总是遵循重定向.但是,有一个功能在所有浏览器中都不受支持,您可以访问XMLHttpRequest对象的responseURL属性.

您可以在下面的代码段中尝试它.重定向按钮将ajax请求发送到回复1重定向的URL(如果有多个重定向,它也可以工作).no redirect按钮将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();
}
Run Code Online (Sandbox Code Playgroud)
<button id="redirect">
  Redirect
</button>
<button id="no-redirect">
  No Redirect
</button>
Run Code Online (Sandbox Code Playgroud)