当我使用下面的代码从我的服务器执行一个简单的 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://
重定向到 wwwhttp://www.
- 将不安全的 HTTP
http://
重定向到安全的 HTTPShttps://
在您的 Web 浏览器中,查看 http://server/Service1.svc?input1=uno&input2=duo
并观察地址栏。它有任何改变吗?检查是否添加了 www
或 https
。
您还可以将您的 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/