【问题标题】:POST request in AJAX dont work asynchronousAJAX 中的 POST 请求不能异步工作
【发布时间】:2011-11-14 02:58:54
【问题描述】:

我为登录用户而进行的 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。如果我在它达到 readyState == 3 之前中断 js 操作在 chrome 的调试器中,它到达 readyState == 4。如果我同步执行它,它可以工作,或者如果我最后添加警报框......就像它需要暂停才能达到 readyState == 4 什么的...那我做错了什么?

顺便说一句,我需要在纯 AJAX 中执行此操作,因为这是学校作业...

【问题讨论】:

  • 在 Firefox 中试试,Chrome 就是不喜欢本地 AJAX。
  • 我一直在 chrome 中发出本地 Ajax 请求,它会发送到本地服务器,应该可以正常工作。文件,OTOH,没那么多。
  • 您是否确认服务器正在接收请求?
  • 就像我说的。我到了 readyState == 2,但不是 3……根据 w3schools,2 是“收到请求”……
  • readystate 2 本质上意味着浏览器获得了 TCP ACK,但还没有真正的响应。服务器出了点问题。您需要验证您向服务器发送正确消息的其他方式。

标签: javascript ajax post asynchronous


【解决方案1】:

这可能是因为 + getCookie("userLoggedOnfn") + "中的quotas;转义getCookie(\"userLoggedOnfn\") 并看到它的工作原理

从控制台

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

【讨论】:

    【解决方案2】:

    我发现了问题!它在 html 代码中。

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

    我刚刚去掉了表单标签,问题就解决了。

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      相关资源
      最近更新 更多