我使用ajax / json自动刷新网站上的内容。使用jkey,我触发一些帖子到文档,在这个动作中我想取消正在运行的原始setTimeout(“重新加载”2分钟) - 然后再次触发整个功能“内容”以在5秒后重新开始。但是,我似乎无法正常停止“重新加载”,在给定的秒数后也不会调用“内容”。有人能发现错误吗?
<script>
$(function content(){
function reloading(){
$.ajax({
url: 'api.php',
data: "",
dataType: 'json',
success: function(data)
{
var id = data[0];
_id = id;
var vname = data[1];
var message = data[2];
var timestamp = data[3];
var field1 = data[4];
_field1 = field1;
var val2 = parseInt(field1, 10) ;
_val2 = val2;
$('#output').hide().html( message ).fadeIn("slow");
$('#username').hide().html( vname +":" ).fadeIn("slow");
setTimeout(reloading,120000);
}
});
}
reloading();
});
$(document).jkey('a',function() {
$.post("update.php", { "id": _id} )
$('#output').hide().html( "<i>thx" ).fadeIn("slow");
$('#username').fadeOut("fast");
$('#valg1').fadeOut("fast");
$('#valg2').fadeOut("fast");
clearTimeout(reloading);
setTimeout(content,5000);
});
</script>
答案 0 :(得分:3)
您必须保存setTimeout()
ID,以便稍后使用clearTimeout()
清除它。像这样:
var timeoutID = setTimeout(function(){someFunction()}, 5000);//this will set time out
//do stuff here ...
clearTimeout(timeoutID);//this will clear the timeout - you must pass the timeoutID
答案 1 :(得分:3)
clearTimeout
应该获得setTimeout
返回的唯一“密钥”。因此,在设置时,将返回值分配给全局变量:
window["reload_timer"] = setTimeout(reloading,120000);
然后有这个:
clearTimeout(window["reload_timer"]);
答案 2 :(得分:0)
除了保存其他帖子中提到的超时ID之外,function reloading
是在function content
内创建的,因为你没有创建任何关闭,所以它无法从程序的其余部分访问。
$(function content(){
function reloading(){
console.log('RELOADING');
}
reloading();
});
// Can't reach `content` or `reloading` from here
你必须做这样的事情:
var reloading, content, reloadingTimeoutId, contentTimeoutId;
reloading = function () {
console.log('RELOADING');
$.ajax(
// CODE
success : function (data) {
// CODE
reloadingTimeoutId = setTimeout(reloading, 120000);
}
)
};
content = function () {
reloading();
};
$(document).jkey('a',function() {
// CODE
clearTimeout(contentTimeoutId);
contentTimeoutId = setTimeout(content,5000);
});
如果不了解更大的图片,那就更难写了。这样,content
将在5秒后被调用,只要reloading
成功,它将每120秒回调一次。请注意reloading
永远不会以这种方式清除。