Javascript AJAX中的POST请求不能异步工作
我对登录用户所做的AJAX调用有问题。代码如下所示:Javascript AJAX中的POST请求不能异步工作,javascript,ajax,post,asynchronous,Javascript,Ajax,Post,Asynchronous,我对登录用户所做的AJAX调用有问题。代码如下所示: function loginUser() { var xmlhttp; if(window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp = new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp = new Act
function loginUser()
{
var xmlhttp;
if(window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
//alert(xmlhttp.responseText);
var responseString = xmlhttp.responseText;
if(responseString.indexOf("loginStatus:approved") != -1) {
document.getElementById("logInBar").innerHTML = "Welcome " + getCookie("userLoggedOnfn") + " <a href=\"logoutUser.php\">Logout</a>";
}
}
}
var params = "loginUsername=" + document.getElementById("loginUsername").value +
"&loginPassword=" + document.getElementById("loginPassword").value +
"&d=" + new Date().getTime();
//alert(params);
xmlhttp.open("POST", "loginUser.php", true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(params);
//alert("."); //this alert box is needed to make it work if it's asynchronous
}
函数登录用户()
{
var-xmlhttp;
if(window.XMLHttpRequest){//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
else{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数(){
if(xmlhttp.readyState==4&&xmlhttp.status==200){
//警报(xmlhttp.responseText);
var responseString=xmlhttp.responseText;
if(responseString.indexOf(“登录状态:已批准”)!=-1){
document.getElementById(“logInBar”).innerHTML=“欢迎”+getCookie(“userLoggedOnfn”)+”;
}
}
}
var params=“loginUsername=“+document.getElementById(“loginUsername”).value+
“&loginPassword=“+document.getElementById”(“loginPassword”).value+
“&d=“+new Date().getTime()”;
//警报(参数);
open(“POST”,“logiuser.php”,true);
setRequestHeader(“内容类型”,“应用程序/x-www-form-urlencoded”);
setRequestHeader(“内容长度”,参数长度);
setRequestHeader(“连接”,“关闭”);
xmlhttp.send(params);
//警报(“.”;//如果是异步的,则需要此警报框使其工作
}
问题是,如果我像这样使用它,它永远不会达到readyState==4,或者3。。。只到2点。如果我在chrome调试器中到达readyState==3之前中断js操作,它将到达readyState==4。如果我做同步,它会工作,或者如果我在最后添加警报框。。。就像它需要暂停才能达到readyState==4或其他什么。。。我做错了什么
顺便说一句,我需要在纯AJAX中这样做,因为这是一个学校作业…这可能是因为+getCookie(“userLoggedOnfn”)+“跳过
getCookie(\'userLoggedOnfn\”)”
中的配额,看看它是否有效
从控制台
Refused to set unsafe header "Content-length"
Refused to set unsafe header "Connection"
我发现了问题!它在html代码中
我在表单标签中有登录按钮和文本框,当我按下表单标签中的按钮时,chrome会自动刷新整个页面。因此,AJAX调用由于页面的重新加载而变得混乱
我刚刚删除了表单标签,问题就解决了。在Firefox中尝试一下,Chrome不喜欢本地AJAX。我一直在Chrome中发出本地AJAX请求,它将发送到本地服务器,应该可以正常工作。文件,OTOH,没有那么多。您是否验证了服务器正在接收请求?如我所说。我得到的readyState==2,但不是3…a根据W3的说法,nd 2是“收到请求”…readystate 2基本上意味着浏览器收到了TCP ACK,但还没有真正的响应。服务器出现了问题。您需要验证向服务器发送正确消息的其他方式。