我正在使用Turbolinks 5和Rails 5,我正在设置一个JS间隔,以便通过AJAX每10秒刷新一次页面内容:
<script type="text/javascript">
$(document).ready(function() {
function fetchContent() {
// some AJAX request
}
setInterval(fetchContent, 10000);
});
</script>
当我第一次加载包含上述代码的页面时,它的工作原理是:fetchContent
每10秒触发一次。
但是,当我导航到另一个页面时,fetchContent
继续射击。此外,当我回到页面时(使用浏览器后退按钮),fetchContent
多次无法预测地发射。显然,这不是通缉行为。
如何解决这个问题?
注意:为了解决这个问题,我知道我可能需要某种类型的clearInterval
调用,但我应该如何使用Turbolinks 5进行调用,例如:我应该绑定什么事件?自Turbolinks 5,API has changed。特别是,所有Turbolinks Classic事件都已重命名,并且包括page:update
在内的一些事件已被删除,因此我无法使用this,this或this等解决方案。
也许我找到了解决方案。在application.js
我说:
function setIntervalWithTurbolinks(intervalFunction, milliseconds) {
var interval = setInterval(intervalFunction, milliseconds);
$(document).on('turbolinks:before-cache turbolinks:before-render', function() {
clearTimeout(interval)
});
}
所以,在我的应用程序中,我用这种方式:
setIntervalWithTurbolinks(fetchContent, 10000);