ajax xmlHttp.readyState == 4未执行

时间:2014-02-07 06:22:50

标签: javascript ajax xmlhttprequest

// JavaScript Document
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 the object');
    }
    else{

        return xmlHttp;
    }
}

function process(){

    if(xmlHttp.readyState==4 || xmlHttp.readyState==0){

        food=encodeURIComponent(document.getElementById("userinput").value);
        xmlHttp.open("GET","foodstore.php?food="+food,true);
        xmlHttp.onreadystatechange=handleServerResponse;
        xmlHttp.send(null);
    }
    else{
                setTimeout(process(),1000);
    }
}

function handleServerResponse(){

    if(xmlHttp.readyState==4 ){
        if( xmlHttp.status==200){

            xmlResponse = xmlHttp.responseXML;
            xmlDocumentElement =xmlResponse.documentElement;
            message=xml.DocumentElement.firstChild.data;
            document.getElementById("underinput").innerHTML=message;
            setTimeout(process(),1000);
        }
        else{

            alert('something went wrong');
        }
    }
    else{
        alert('something went wrong 2');
    }
}

在上面的代码中,我的xmlHttp.readyState==4未执行,而是每次都会执行else中的警报。

4 个答案:

答案 0 :(得分:0)

首先这是错误的

setTimeout(process(),1000);

你将要做一个无限循环,再加上它为什么你会这样做是没有意义的。您正在调用该函数,而不是为其分配引用。

setTimeout(process,1000);

其次,readystate可以是0,1,2,3,4,这不是错误,因为你的警报状态。


将您的代码更改为

function handleServerResponse () {
    if(xmlHttp.readyState==4 ){
        if( xmlHttp.status==200){
            var xmlResponse = xmlHttp.responseXML;
            var xmlDocumentElement =xmlResponse.documentElement;
            var message=xml.DocumentElement.firstChild.data;
            document.getElementById("underinput").innerHTML=message;
            setTimeout(process,1000);
        }
        else{
            alert('something went wrong.\n' + xmlHttp.status + "\n" + xmlHttp.statusText);
        }
    }
}


function process(){
    var food=encodeURIComponent(document.getElementById("userinput").value);
    xmlHttp = createXmlHttpRequestObject();
    xmlHttp.open("GET","foodstore.php?food="+food,true);
    xmlHttp.onreadystatechange=handleServerResponse;
    xmlHttp.send(null);
}

答案 1 :(得分:0)

的setTimeout(过程(),1000); setTimeout的用法不正确。 尝试setTimeout('process()',1000);或setTimeout(进程,1000);

答案 2 :(得分:0)

在函数handleserver响应中,它显示对应于if(xmlHttp.readyState==4 )语句的else。

我在xampp服务器上运行我的程序。我做对了吗?

答案 3 :(得分:0)

保持XMLHttpRequest的状态。从0到4的变化: 0:请求未初始化 1:建立服务器连接 2:收到请求 3:处理请求 4:请求已完成且响应已准备好

这些是就绪状态变化的值,所以根据这个要求我的请求没有完成或者我的响应没有准备好。

我删除了setTimeout(process, 1000),但仍无效