Turbolinks 5和setInterval问题

问题描述 投票:0回答:1

我正在使用Turbolinks 5Rails 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在内的一些事件已被删除,因此我无法使用thisthisthis等解决方案。

ruby-on-rails ruby-on-rails-5 setinterval turbolinks turbolinks-5
1个回答
0
投票

也许我找到了解决方案。在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);
© www.soinside.com 2019 - 2024. All rights reserved.