【发布时间】:2012-06-01 13:10:36
【问题描述】:
我有一个间隔,它每 3 秒运行一次函数。
intervalStepper = window.setInterval('intervalTick()','3000');
function intervalTick() {
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
gotResult(xmlhttp.responseText);
}
}
xmlhttp.open('GET','index.php?ajax=true',true);
xmlhttp.send();
}
function gotResult(res) {
alert(res);
}
另外,我还有另一个 Ajax 调用,它在按钮单击时运行。
if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else {// code for IE6, IE5
xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
agentDetailGotten(xmlhttp.responseText);
}
}
xmlhttp.open('GET','index.php?anotherPage=true',true);
xmlhttp.send();
现在,如果我在时间间隔滴答作响并执行第一个调用时及时运行第二个代码,那么这些调用实际上几乎在同一时间运行。但后来似乎间隔以某种方式消失了——他不再滴答作响了。
这是一个已知问题还是我只是没有看到什么大问题...
感谢您的帮助!
【问题讨论】:
-
您将 all 变量声明为隐式全局变量。使用
var语句将xmlhttp请求本地化到您的intervalTick()函数。这不会解决您的问题,但不会有帮助。 -
此外,您应该永远将字符串传递给
setTimeout/setInterval:改用window.setInterval(intervalTick,'3000');。欲了解更多信息,请参阅here -
哦,
setTimeout和setInterval的超时值应该是整数,而不是字符串,所以使用window.setInterval(intervalTick, 3000);
标签: javascript ajax intervals