使用setTimeout(fn,0)每n秒执行一次AJAX

时间:2018-04-14 14:53:29

标签: javascript ajax settimeout

我正在尝试执行Ajax调用来检查数据库表是否已使用某些特定的新数据进行更新。

我在这个question中找到了解决方案的一部分:而不是使用while循环(显然充斥浏览器),应该使用两个独立的函数,其中一个使用{{1} (解释为什么这个技巧成功地允许Ajax调用不重叠并泛滥浏览器here和此video)。

我的问题是:如何强制每次Ajax调用之间的特定时间间隔?我已经尝试将时间设置为优于0(例如setTimeout(fn,0) ),但这似乎对每个Ajax调用之间的实际延迟没有影响:一旦完成,下一个开始。

注意:在下面的示例中,我有一个开/关开关(存储在setTimeout(checkNewData(), 7000);中),可以切换以中断过程

autoload_switch

1 个答案:

答案 0 :(得分:0)

现有代码中只有1个错误

你写过

setTimeout(checkNewData(),7000);

而不是

setTimeout(checkNewData,7000);

我希望这能解决你的问题

checkNewData(); //starts the looping function

function checkIfAutoLoadOn(){
    if(autoload_switch === "on")
        setTimeout(checkNewData, 7000);
}

function checkNewData() {
  //Check if solutions
  $.ajax({
      async: true,
      type: "POST",
      url: "cgi-bin/check_NewData.py",
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
      data: JSON.stringify(data_refs),
      dataType: "json"
    })
    .done(function(result) {
      if (result["new_data"]==="true") {
        // Do sth with data     

      } else if (result["new_data"]==="false") {
        //Check again in some seconds if new data arrived
        checkIfAutoLoadOn()     
      }
    })
}