XMLHTTPREQUEST READY STATE CHANGE ERROR

时间:2014-01-11 15:41:09

标签: javascript php xmlhttprequest

任何人都可以帮助或指导我找出为什么下面的代码不会按预期运行(即警告来自php的回声),而是警告“发生了负面的事情”?

我的Javascript代码如下:

window.onload = function(){

    var regForm = document.getElementById("register").onsubmit = checkForm;
}

//Let's see if this user already exists

function checkForm(){   

alert("You pressed Register!");

var cc = document.getElementById("un3").value;

    if (window.XMLHttpRequest){
        // code for IE7+, Firefox, Chrome, Opera, Safari
         xmlhttp=new XMLHttpRequest();
        alert("You are using XML HTTP REQUEST");
    }else{
        // code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        alert("YOU ARE USING ACTIVE X OBJECT");
    }

    xmlhttp.onreadystatechange=function(){
        if (xmlhttp.readyState==4 && xmlhttp.status==200){
                alert(xmlhttp.responseText);
            return false;
            }else{
            alert("Something negative happened");
        }
    }

    xmlhttp.open("GET","user_exists.php?q="+cc,true);
    xmlhttp.send();
}

我的php文件被简化以使这个东西起作用:

<?php

$q=$_GET["q"];

echo "something good happened";

?>

2 个答案:

答案 0 :(得分:0)

那是因为onreadystatechange也是changes when connecting before the result is there

试试这个:

xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState==4) {
        // only check when state is "the communication is done"
        if (&& xmlhttp.status==200){
             alert(changes when connecting before the result is therexmlhttp.responseText);
             return false;
        }else{
              alert("Something negative happened");
     } else {
            // ignore other states
     }
}

更好的方法是使用像jQuery或dojo这样不错的JavaScript库,这样你就不必自己完成所有这些了。<​​/ p>

答案 1 :(得分:0)

试试这个:

xmlhttp.onreadystatechange=function(){
    if(xmlhttp.readyState==4){
        if(xmlhttp.status==200){
            alert(xmlhttp.responseText);
            return false;
        }else{
            alert("Something negative happened");
        }
     }
 }

readyState多次出现,而不是总是4次。 看看this question

我更愿意从请求中取出响应,以保持代码清洁。在你的情况下:

xmlhttp.onreadystatechange=responshandler;

function responsehandler(){
   //here the response code
}

请确保您在函数外部声明var xmlhttp;以使其全局化。