我有以下 javascript 函数,每 10 秒运行一次以将一些数据与数据库同步。
function sync(){
latestID = $("#dataDiv tbody tr:first").attr("data-key");
var url = '<?=$model['fn']?>';
$.ajax({
url: url,
type: 'post',
dataType: 'json',
data:{latestID: latestID},
success: function (result) {
//Do some stuff
}
});
setTimeout(sync, 10000);
}
此函数在选中 Activate Sync
复选框时开始执行。但是一旦它运行,它不会在取消选中复选框时停止。
下面是我已经尝试过的方法,它可以执行任何操作,并且该函数会一直执行,直到页面重新加载(默认情况下未选中该复选框)
function checkSync(){
var doSync;
if($('#keepChecking').is(':checked')){
doSync = sync();
//alert("checked"); return false;
}else{
clearTimeout(doSync);
return false;
//alert("not checked"); return false;
}
}
最佳答案
这应该处理超时和 ajax 请求:
var ajaxRequest,
syncTimeout;
function sync(){
latestID = $("#dataDiv tbody tr:first").attr("data-key");
var url = '<?=$model['fn']?>';
ajaxRequest = $.ajax({
url: url,
type: 'post',
dataType: 'json',
data:{latestID: latestID},
success: function (result) {
//Do some stuff
}
});
syncTimeout = setTimeout(sync, 10000);
}
function checkSync(){
if($('#keepChecking').is(':checked')){
sync();
//alert("checked"); return false;
}else{
clearTimeout(syncTimeout);
ajaxRequest.abort();
return false;
//alert("not checked"); return false;
}
}
关于javascript - 无法停止在 setTimeout 上运行的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46889237/