每当我运行这个文件时,代码就会运行到发送函数触发的位置,然后只有在我有一个警报函数后才会触发,如果我取出警报(“发送”);然后它回复ServerReadyyState
是:1。
可能是什么问题?有人请帮忙,我已经在我的本地机器和我的个人服务器上尝试过,并得到了相同的结果。非常感谢任何帮助。
守则:
/**
* @author d
*/
var xhr;
function getPlants(xhr) {
try {
xhr = new XMLHttpRequest();
} catch (microsoft) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
xhr = false;
alert("ajax not supported");
}
}
}
xhr.open("GET", "db_interactions.php", true);
xhr.send(null);
alert("sent"); //the send function only works if this alert functions is here
if (xhr.readyState == 4) {
return xhr.responseText;
} else {
alert("Server ReadyState is:" + xhr.readyState);
xhr.abort();
//getPlants(xhr);
}
}
答案 0 :(得分:1)
AJAX是异步的。您不能在紧接着之后立即检查就绪状态。
正确的设计模式是为就绪状态改变时的AJAX调用分配一个函数。
xhr.onreadystatechange = function () { alert('It changed!') }
在 函数中,您需要检查状态是否为4.如果是,您就可以处理输出了。如果不是,则不执行任何操作,因为在就绪状态为4之前将调用该函数几次。
答案 1 :(得分:0)
请求需要一些时间。添加alert()时,代码将被停止,直到用户单击ok。因此,当您删除它时,请求将被发送并立即检查。导致未完成的请求。
将代码更改为:
xhr.onreadystatechange=state_change
xhr.send(null);
function state_change() {
if(xhr.readyState==4) {
return xhr.responseText;
} else {
alert("Server ReadyState is:"+xhr.readyState);
}
}
某种功能就像在这种情况下每次状态改变时都会调用 state_change 。因此,您可以等到请求完成或出现错误代码。