你好我正在制作一个xmhhttp请求,但该网站需要一些时间来加载,所以我只得到ReadyState = 3和status = 200.所以我需要一些等待,直到readystate = 4,但我想限制这个函数只有在readystate为4时才检查一次,否则什么都不做。
这样的延迟功能怎么样?
if (xmlhttp.readyState==4 && xmlhttp.status==200)//Add the delay here so that the else doesn't occur
{
var txt=xmlhttp.responseText;
.....
else {
document.write("status: " + xmlhttp.readyState + " " + xmlhttp.status);
}
答案 0 :(得分:4)
你为什么要发明轮子?
您应该将处理程序传递给XHRs
onreadystatechange
回调。
xmlhttp.onreadystatechange = function() {
switch( xmlhttp.readyState ) {
case 4: {
if (xmlhttp.status === 200) {
var txt = xmlhttp.responseText; // or do something else here
}
break;
}
case 3: {
// go interactive !
break;
}
}
};
答案 1 :(得分:2)
如果我理解正确的话,setInterval
可能会成功:
var seconds = 0;
var interval = setInterval(function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
// Stop checking
clearInterval(interval);
// Ready
var txt = xmlhttp.responseText;
} else if (++seconds > 10) { // Do we give up?
clearInterval(interval);
// Give up
}
}, 1000); // Checks once every second
答案 2 :(得分:0)
我们可以编写一个函数来检查xmlhttp-object的状态:
var checkState = function(xmlhttp, callback) {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
callback(whatever, arguments, that, you, want, to, send);
} else {
// Check back again 1 sec later
setTimeout(checkState, 1000);
}
};
然后你可以像这样使用它:
checkState(xmlhttp, function(whatever, arguments, you, need) {
// the code here will be run when the readyState is 4 and the status is 200
});
但有两件事:
答案 3 :(得分:-2)
也许使用像
这样的东西编辑:使用onreadystatechange:
Connection.onreadystatechange = function()
{
if (Connection.readyState != 4)
{
return;
}
else
{
// do your thing
}
};