我正在尝试在setInterval函数中调用clearInterval,它正在进行一些ajax获取,没有任何运气。
var nre = setInterval('checkit()',5000);
$(function() {
checkit = function(){
$.post("check.php", { login: "<?php echo $_SESSION['login'];?>" }, function( data ) {
if (data == 1) {
$('#debug').html(data);
window.clearInterval(nre);
}
});
}
});
关键是,循环不会中断,尽管收到正数据。
我已经读过setInterval函数的异步操作可能是这里的问题。有没有更好的方法来解决它?
答案 0 :(得分:6)
将所有内容移动到同一范围内,不要使用setInterval
的字符串形式:
$(function() {
var nre = setInterval(checkit, 5000);
function checkit() {
$.post("check.php", { login: "..." }, function( data ) {
if (data === 1) {
$('#debug').html(data);
clearInterval(nre);
}
});
}
});
答案 1 :(得分:2)
document.ready
之外无法看到 checkit,因此请在setInterval
内移动document.ready
来电。
如果要为变量checkit分配匿名函数,则必须在分配变量后移动setInterval调用。
$(function() {
var checkit = function(){
$.post("check.php", { login: "<?php echo $_SESSION['login'];?>" }, function( data ) {
if (data == 1) {
$('#debug').html(data);
window.clearInterval(nre);
}
});
}
var nre = setInterval(checkit,5000);
});
或者,如果声明该函数,则可以在函数声明之前调用setInterval
。
$(function() {
var nre = setInterval(checkit, 5000);
function checkit() {
$.post("check.php", { login: "..." }, function( data ) {
if (data == 1) {
$('#debug').html(data);
clearInterval(nre);
}
});
}
});