【问题标题】:How to stop timer if function executed properly?如果功能正确执行,如何停止计时器?
【发布时间】:2015-07-30 23:31:20
【问题描述】:

Section() 负责查看数据库并获取任何匹配的 HTML 代码。如果没有匹配,则没有回调(但我可以回调一个空的东西)。

然后它调用addIt() 并显示HTML。工作正常。

我的问题是什么时候从数据库中获取一些 HTML 来停止计时器?因为现在它每 10 秒添加一次 HTML。

function addIt(data) { $(data).insertAfter('#hello'); }

setInterval(function Section(){
      $.getJSON("domain"+ number, addIt);
}, 10000);

【问题讨论】:

标签: javascript jquery


【解决方案1】:

也许是这样的:

var x = setInterval(function Section(){
  $.getJSON("domain"+ number, addIt);
}, 10000);

if( // something ) {
   clearInterval(x);
 }

【讨论】:

    【解决方案2】:

    我永远不会在间隔中调用 AJAX。而是使用回调再次调用

    function Section(){
       $.getJSON("domain"+number,addIt);
    }
    function addIt(data) { 
        if (data) $(data).insertAfter('#hello'); 
        else setTimeout(Section,10000); // call again in 10 seconds unless data was returned
    }
    Section(); // first call
    

    如果在不返回数据时调用导致错误,请尝试以下操作:

    $.getJSON("domain"+number, function(data) {
      if (data) $(data).insertAfter('#hello'); 
    })
    .fail(function() { 
      setTimeout(Section,10000);
    });
    

    【讨论】:

    • 您好,谢谢您的回答。我是 AJAX、jQuery 和这些方面的新手,我正在尝试每 x 秒重复一次 Section()。还有什么方法可以做到这一点,更好的方法?
    • 就像我向你展示的那样。它将在 10 秒内调用 Section(成功调用后),但前提是没有数据。如果有数据,它将停止。我的方法将确保循环也因错误而停止。
    • 我明白了,这很好。你能告诉我为什么,在理论上意味着为什么它不好?
    • 如果你的服务器比超时秒响应慢,你会在它还在处理的时候一次又一次地调用它
    • 意思是如果我将计时器设置为 1 秒,但由于某种原因需要 2 秒来响应,这意味着它将运行 2 次。但是对于您的情况,它将在完成后运行。对吗?
    【解决方案3】:
    var timerId;
    
    function addIt(data) { 
      $(data).insertAfter('#hello');
    }
    
    function section() {
      $.getJSON().done(function(data) {
        addIt(data);
    
        if (timerId) {
          clearInterval(timerId);
        }
      });
    }
    
    timerId = setInterval(section, 10000);
    

    【讨论】:

      猜你喜欢
      • 2023-04-11
      • 2018-10-17
      • 1970-01-01
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多