// 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
中的警报。
答案 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)
,但仍无效