Javascript AJAX中的POST请求不能异步工作

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

我对登录用户所做的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 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,但还没有真正的响应。服务器出现了问题。您需要验证向服务器发送正确消息的其他方式。