1

我之前问过一个关于xmlHttp.send()代码不起作用的问题。我以为我已经解决了所有问题,但现在我遇到了另一个问题。

handleServerResponse()函数中,代码在if (xmlHttp.readyState == 4) and if (xmlHttp.readyState == 200). 为什么这样做?JavaScript 下有一个示例 php 代码。

var xmlHttp = createXmlHttpRequestObject();

        function createXmlHttpRequestObject(){
            var xmlHttp;

            if(window.ActiveXObject){
                try{
                   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
                }catch(e){
                    xmlHttp = false;
                }
            }else{
                try{
                   xmlHttp = new XMLHttpRequest();
                }catch(e){
                    xmlHttp = false;
                } 
            }

            if(!xmlHttp){
                alert("cant create that object hos");

            }else{
                return xmlHttp;
            }
        }




function newuser() {

            if (xmlHttp.readyState == 0 || xmlHttp.readyState == 4) {
                name = encodeURIComponent(document.getElementById("name").value);

                queryString = "name=" + name;
                xmlHttp.open("GET", "code/php/core.php?" + queryString, true);
                xmlHttp.onreadystatechange = handleServerRespons;
                xmlHttp.send();
           }else{
               setTimeout('newuser()', 1000)
           }  
    }

    function handleServerRespons(){

        if (xmlHttp.readyState == 4){

            if (xmlHttp.readyState == 200){
                alert('1234545');
                xmlResponse = xmlHttp.responseXML;
                xmlDocumentElement=xmlResponse.documentElement;
                message = xmlDocumentElement.firstChild.data;

                alert(message);

                }
            }
        } 

php代码:

         $name = $_GET['name'];

                      header('Content-Type: text/xml');
                      echo '<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>';
                      echo '<response>';
                      echo $name;
                      echo '</response>';
4

3 回答 3

1

xmlHttp您必须thisonreadystatechange事件回调中使用,而不是使用变量 ( ),
这样您的函数将是:

function handleServerRespons() {
  if ( this.readyState === 4 && this.status === 200 ) { // and also use "status" here not "readyState"
    xmlResponse = this.responseXML;
    xmlDocumentElement=xmlResponse.documentElement;
    message = xmlDocumentElement.firstChild.data;
    alert( message );
  }
}

(function(){...})();或像下面这样包装你的代码

(function() {
  // all your code goes here, so you can use that 'xmlHttp' instead of 'this'
})();
于 2013-06-25T20:12:43.117 回答
0

xmlHttp.readyState不能是 200。你应该使用xmlHttp.status.

于 2013-06-25T19:27:04.013 回答
0

xmlHttp.readyState具有 XMLHttpRequest的状态 XMLHttpRequest 对象

xmlHttp.status将在xmlHttp.readyState3 或 4 时可用。可用xmlHttp.status时应表示 HTTP 状态代码。

于 2013-06-25T19:36:52.660 回答