JavaScript(JQuery / Ajax)计时器自行停止

时间:2015-11-11 16:27:51

标签: javascript jquery ajax timer

因此,我开发了this网站,用于监控全球多个实验的状态。该网站应该每隔几秒更新一次,所以我每隔3秒就使用一次JavaScript。

该页面工作正常,但如果我离开它一段时间或切换标签,计时器就会停止!在源代码中,您将看到停止计时器的唯一操作是:

1-如果用户点击了计时器本身

2-如果用户选择要查看的特定数据

为什么单独停止?我怎么能强迫它永远运行?我怀疑这是一个浏览器的事情。我使用的是谷歌浏览器46.0.2490.80和Firefox 42.0。

如果您需要任何其他信息,请询问。

2 个答案:

答案 0 :(得分:1)

有趣的案例。

请注意,您不必切换计时器停止的标签,只需稍等一下,它最终会自行停止。

您的#submitDateForm HTML格式不正确(缺少</center>结束标记),因此</form>结束标记似乎被忽略。

因此,此表单与以下表单合并(#refreshForm)。提交后者时,它还会提交“父”表单(#submitDateForm),因此会发送两个AJAX / POST请求。然后是一个竞争条件,关于哪一个将最后解决并覆盖您的doCount全局变量的值,这是您的计时器的开关。

最终#submitDateForm请求会比另一个请求稍微长一点,将doCount设置为0,就是这样!你的计时器停止了。

演示:http://jsfiddle.net/c86kfu1a/

顺便说一句,HTML中还有其他一些语法错误(例如{2}处的</cetner>),找不到2个文件(default.css和highlight.pack.js)。

我建议您使用Developers工具进行调试,这非常方便。在Chrome和Firefox中按F12打开面板。

答案 1 :(得分:0)

现代网络浏览器上的计时器无法正常运行。

由于标签位于后台,因此Chrome和其他浏览器会将功能和超时/间隔限制为每秒最多一次。

可能的解决方案(虽然不是您的案例的最佳架构)是使用Web Workers。看一下这个插件https://github.com/turuslan/HackTimer

重复的问题:Chrome: timeouts/interval suspended in background tabs?