繁体   English   中英

Ruby Rails-JS-停止AJAX中的先前脚本

[英]Ruby Rails - JS - stop previous scripts in AJAX

我已经将此javascript更改为递增计时器。 脚本工作正常。 但是我在ajax响应中使用它。 第一次运行ajax查询时,我得到JS作为响应,并且此时钟运行良好。 但是,当我在第一个请求之后发出更多请求时,计时器就会感到困惑,好像正在运行多个setInterval一样,这会导致不受控制的计数,因此,在每个新的ajax响应之后,统计信息的运行速度都会更快,而不是按秒逐步递增。 我该如何解决?

function calcage(secs, num1, num2) {
  s = ((Math.floor(secs/num1))%num2);
return s;
}

function clock() {
++startNumber;

  DisplayStr = displayFormat.replace(/%%D%%/g, calcage(startNumber,86400,100000));

        t = calcage(startNumber,3600,24);
        if (t < 10) {
    DisplayStr = DisplayStr.replace(/%%H%%/g, "0"+t);
        } else {
        DisplayStr = DisplayStr.replace(/%%H%%/g, t);
        }

        t = calcage(startNumber,60,60);
        if (t < 10) {
    DisplayStr = DisplayStr.replace(/%%M%%/g, "0"+t);
        } else {
        DisplayStr = DisplayStr.replace(/%%M%%/g, t);
        }

        t = calcage(startNumber,1,60);
        if (t < 10) {
    DisplayStr = DisplayStr.replace(/%%S%%/g, "0"+t);
        } else {
        DisplayStr = DisplayStr.replace(/%%S%%/g, t);
        }

$("#counter").html(DisplayStr);
}

$('#view').html(<%= (render :partial => 'ajax_response').to_json.html_safe %>);
#partial render and read "#timer" value as integer to start ahead. "#timer" is in "#view" div
$(function(){
c = $("#timer").val();
startNumber = parseFloat(c);
displayFormat = "%%D%% Days, %%H%%:%%M%%:%%S%%";
var int=self.setInterval("clock()",1000);
});

这是因为有多个正在运行的时间间隔。 您需要通过执行clearInterval(int)来清除要停止的时间间隔。 或者,或者确保仅对任何给定函数运行一次setInterval

此外,除了要点外,但是将字符串作为setInterval参数是一个不好的事情(tm)。 使用setInterval(clock, 1000)代替。

同样是#2,即使它是完全合法的,我能否只说一个带有int变量的令人困惑呢? :P

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM