【问题标题】:RoR 4 and jQuery - Data Not Updating in setIntervalRoR 4 和 jQuery - setInterval 中的数据未更新
【发布时间】:2015-12-24 06:20:10
【问题描述】:

Rails 4 环境,尝试获取一些进度条状态,以 1/10 秒的间隔更新当前表数据。

这里是 setInterval 调用的代码:

setInterval(function () {
    var current_roll = parseInt('<%= @run.current_roll %>', 10);
    var roll_per = (current_roll / max_roll) * 100
    $('#roll_progress_label').html(current_roll);
    $('#roll').attr('aria-valuenow', current_roll);
    $('#roll').attr('style', 'width:' + roll_per + '%');
    // if (current_roll = max_roll) {
    //    clearInterval(roll_interval);
    //  }
  }, 100);

出于测试目的,我已将 clearInterval 注释掉。

所有的数学运算都正确。进度条会使用适当的标签和宽度更新,但只会更新一次。间隔不是每 100 毫秒循环通过该代码。它获取第一个值,然后永远不会改变。理论上,此代码应按该计划更新#roll_progress_label 的.html。 (我也用该 div 的 .text 对此进行了测试,但没有成功。)

另外,请注意,我已在数据库中确认所有数据都正确写入。

我知道我错过了一些简单的东西。救命!

【问题讨论】:

  • 我建议你让它可重现。你的问题没有一个容易重现的编程问题。您可能会考虑提供一个最小的 HTML 并建议一些虚拟值。 @run.current_roll 在每个间隔被读取,但它的值多久更新一次?

标签: javascript jquery ruby-on-rails-4


【解决方案1】:

我敢打赌,如果你添加了console.log,你会看到这个函数确实每 100 毫秒运行一次。服务器只渲染一次@run.current_roll,所以current_roll 的值总是相同的。

我认为您想要的是轮询(每 X 毫秒向服务器发出一个请求)或类似 WebSockets 的东西(我听说在 Rails 5 中更容易,但我对 Rails 上的 WebSockets 没有任何直接经验)。

【讨论】:

  • 嗨,安迪,感谢您的评论。我已经通过其他方式确认它正在触发,但也可以通过 WebSockets 之类的方式了解轮询的含义。我现在正在研究这个问题,我会在编写代码时发布解决方案。
  • 标记为答案,因为它让我走上了正确的道路。使用 WebSockets 的长轮询让我走上了 Pusher 和 SSE 的道路。 Pusher 实际上在一个易于更新 DOM 的流上为我提供了我需要的数据,但我无法支付第三方费用。我正在继续研究内部编码。谢谢,@Andy。
猜你喜欢
  • 2015-02-27
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多