当我使用下面的代码从我的服务器执行一个简单的 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
。
我被困住了。我该怎么处理我的问题?
答案 0 :(得分:2)
您的服务器看起来像是:
http://
重定向到www http://www.
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前缀)。