如何处理状态302?

时间:2012-11-21 15:57:21

标签: javascript redirect xmlhttprequest

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

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。根据{{​​3}},状态代码302表示暂时重定向资源。我不完全确定在我的情况下这意味着什么,因为当我在FireFox中输入我的URL时,我会得到应有的响应,看起来很棒。

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

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

我被困住了。我该怎么处理我的问题?

2 个答案:

答案 0 :(得分:2)

您的服务器看起来像是:

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

在您的网络浏览器中,查看http://server/Service1.svc?input1=uno&input2=duo并观察地址栏。它会以任何方式改变吗?检查是否添加了www,或https

您还可以将您的javascript网址更改为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); 

答案 1 :(得分:1)

它可能与IIS服务器上的某些内部重定向有关。我还要检查服务是否安装在应用程序池中。

此外,它可能类似于协议开关或域模糊(即安全/不安全的http和/或/ sans w3前缀)。