我有这个改变的 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);
});