以下是每隔10秒检查一次页面的数据(一个简单的整数)。当整数存在时(data!= null),然后提醒并停止好的间隔。
BUT 相反,它每10秒排队一次警报。当脚本最终找到它正在寻找的整数时,会弹出大量警报......每十秒一个。如果脚本持续50秒,您将在页面加载后50秒内同时获得5个警报。
有什么问题? if (data != null) {
不应该阻止警报根本触发...直到有数据?我不知所措。此外,“数据”永远不会出现在警报中。
var pinger;
$(document).ready(function() {
var pinger = setInterval(function(){
$.get("/ajax.php", function(data) {
if (data != null) { /** Shouldn't this line stop loops? **/
alert("alert" + data);
clearInterval(pinger);
}
});
}, 10000);
});
答案 0 :(得分:1)
/ajax.php
比setInterval()调用函数的延迟花费的时间更多。所以当它结束时,setInterval()实际上已多次调用该函数。
使用setTimeout()而不是setInterval():
$(document).ready(function() {
setTimeout(function self(){
$.get("/ajax.php", function(data) {
if (data != null) {
alert("alert" + data);
} else {
setTimeout(self, 10000);
}
});
}, 10000);
});
答案 1 :(得分:0)
我敢打赌你没有从$.get
得到一个空(即使有一个空字符串,然后将它与null比较返回true - '' != null
返回true)。这就是警报弹出的原因。
另外,有些人提出了一个很好的观点,即如果你的ajax调用需要超过10秒,那么它会触发另一次,即使先前的ajax可能会返回假设停止循环的正确数据。