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

时间:2011-11-14 02:58:54

标签: 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 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
}

问题在于,如果我有这样的话,它永远不会达到readyState == 4,或者3就此问题......它只会到达2.如果我在js操作到达readyState之前打破了== 3在chrome中的调试器中,它到达readyState == 4.如果我同步它,它可以工作,或者如果我在最后添加警告框...它就像它需要暂停才能达到readyState == 4或者什么......所以我做错了什么?

顺便说一句,我需要在纯AJAX中这样做,因为这是一项学校作业......

2 个答案:

答案 0 :(得分:0)

可能是因为quotas内+ getCookie(“userLoggedOnfn”)+“;转义getCookie(\"userLoggedOnfn\")并看到它有效

来自控制台

   Refused to set unsafe header "Content-length"
   Refused to set unsafe header "Connection"

答案 1 :(得分:0)

我发现了问题!这是在HTML代码中。

我在表单标签中有登录按钮和文本框,当我按下表单标签内的按钮时,chrome会自动刷新整个页面。因为重新加载页面,AJAX调用搞砸了。

我刚删除了表单标签,问题就解决了。