javascript - 无法停止在 setTimeout 上运行的函数

标签 javascript jquery checkbox settimeout

我有以下 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/

相关文章:

javascript - 同步 jquery 警报

javascript - 我如何使用 jQuery 查找元素是否包含特定类?

java - JFace:带有特定节点复选框的 CheckboxTreeviewer

javascript - 如何从javascript中设置的时间段内每天的数组中获取值?

javascript - 使用 Vue.js 显示选中的复选框

jquery - 如何关闭并覆盖 jQuery Mobile 模态对话框?

javascript - 除非有警报,否则 Jquery 变量无法获取正确的值

c++ - MFC/C++ : Setting property BS_OWNERDRAW to checkbox button doesn't work

javascript - 如果选中复选框,Angularjs 禁用按钮

javascript - 如何将变量从gridview yii发送到javascript