javascript - 如何处理状态 302?

标签 javascript redirect xmlhttprequest

当我使用下面的代码从我的服务器执行一个简单的 XML HTTP 请求

var targetUrl = "http://server/Service1.svc?input1=uno&input2=duo";
document.getElementById("console").innerHTML += "<br>commencing";

var xhr = new XMLHttpRequest();
xhr.onload = function () {
  document.getElementById("console").innerHTML += "<br>callbacking";
  alert(xhr.responseText);
}

xhr.open("GET", targetUrl);
document.getElementById("console").innerHTML += "<br>finishing";

xhr.send();

我在 FireBug 的控制台中收到状态代码 302。根据this W3 article ,状态码302表示资源被临时重定向。我不完全确定这对我的情况意味着什么,因为当我在 FireFox 中输入我的 URL 时,我得到了预期的响应,看起来很棒。

关于这个问题的文章很多,但我无法直截了当。例如,this one只重述状态码的定义。 This one建议使用 HEAD 而不是 GET 但在我的情况下这不是一个选项(除非绝对必要)。 Here它甚至声称状态代码 302 自动 导致正确重定向到页面移动到的地方(导致状态代码 200),这在我的例子中是不正确的。

我试过查看 xhr.getRespoonseHeader("Content-Type") 但显然,它是 null

我卡住了。我能做些什么来解决我的问题?

最佳答案

看起来您的服务器是:

  • 将非 www http:// 重定向到 www http://www.
  • 将不安全的 HTTP http:// 重定向到安全的 HTTPS https://

在您的 Web 浏览器中,查看 http://server/Service1.svc?input1=uno&input2=duo 并观察地址栏。它有任何改变吗?检查是否添加了 wwwhttps

您还可以将您的 javascript URL 更改为 www 版本和 https 版本,以查看是否可以修复它。

编辑:根据你所说的https,我认为它是将http重定向到https。您的 ajax 代码不正确,这将解释为什么回调不起作用。

您需要使用 onreadystatechange 事件(不是 onload)并检查状态 4,这意味着它已完成:

xhr.onreadystatechange = function(){
    if(xhr.readyState == 4){
            document.getElementById("console").innerHTML += "<br>callbacking";
            alert(xhr.responseText);
    }
}
xhr.open("GET", targetUrl, true);
xhr.send(null); 

关于javascript - 如何处理状态 302?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13497080/

相关文章:

javascript - Redux 使用 combineReducers 返回空白页

redirect - Intelligencia URLRewriter HTTP 到 HTTPS

redirect - 网站显示 sitecore 登录页面

javascript - 使用 XMLHttpRequest 时如何处理 JavaScript 中的 "Access to restricted URI denied"错误?

javascript - 如何更新 MooTools Request.HTML 调用中的多个元素

php - 发送长 XMLHttpRequest 后导航到另一个页面

javascript - jQuery 鼠标悬停/鼠标悬停显示/隐藏 div

javascript - 使用不同的连接字符串进行级联下拉列表

javascript - 如何将 Promises 与 if 结合起来?

redirect - 在 IIS7 中重写映射 - 不重定向