【问题标题】:Rails 3 - Periodic Refresh of DIVRails 3 - DIV 的定期刷新
【发布时间】:2012-06-13 20:14:02
【问题描述】:

我正在尝试使用 AJAX/Unobtrusive JavaScript/JQuery 刷新 div 的内容。

如果我创建一个“刷新”链接并给它一个数据远程属性,这很容易做到。

但是,我想使用 setInterval 函数而不是使用链接每 2 秒刷新一次。

这段代码应该演示我正在尝试做的事情。放入 application.js 时它不起作用,因为没有评估 ERB,但希望它能解释我的目标。

  setInterval(function(){
    $("#scuttlebutt").html("<%= escape_javascript(render 'scuttlebutt') %>");
  },2000);

在 Rails 3 中执行此操作的正确方法是什么?

(我正在使用 Rails 3.2.5)

【问题讨论】:

    标签: jquery ruby-on-rails-3 ujs


    【解决方案1】:

    好的,我明白你要做什么了。我以前做过这个,我找到了一个简单的方法。

    您希望在控制器中仍然拥有调用远程方法的按钮,该控制器在浏览器中执行一些 javascript 以刷新该 DIV。我知道,我知道,你不想拥有它,但我在这里。我的页面上有一个,但我把它藏在一边,这样没人能找到它,链接这个:

    :id => "refresh_button", :style => "position: absolute; left: -9999px" // Rails ERB notation
    

    然后,我将它添加到同一个文件中,我认为它是一个 .html.erb 文件。

    <script type="text/javascript">
      function doSomething() {
        $('#refresh-button').click();
      }
    
      setInterval('doSomething()',2000);
    </script>
    

    这将每 2 秒按下一次按钮,调用您的远程函数,就好像有人每两秒点击一次该按钮一样。我知道,这不是最干净的方法,但它在紧要关头很有效,直到你可以得到更强大的东西为你工作。虽然你可以在技术上使用它。

    希望对您有所帮助。

    【讨论】:

    • @Selah 欢迎您。很高兴我能帮助您并正确回答您的问题。在我必须实施它的网站上,我工作得很好。
    【解决方案2】:

    我最终将代码放在 application.js 中:

    • 检查div是否存在
    • 使用 setInterval 制作计时器
    • 在当前 URL 从 Rails 请求一个 js 脚本,这将导致评估 js.erb 视图文件。当这个文件运行时,它会更新我的 div。

    看……

    assets/javascripts/application.js

    $(function() {
    
      if ($('#scuttlebutt').length) {
        setInterval(function(){
          $.getScript(window.location.pathname, function(data, textStatus, jqxhr) {
            console.log('Load was performed.');
          });
        },2000);
      }
    
    });
    

    views/tickets/show.js.erb

    $("#scuttlebutt").html(" <%= escape_javascript(render 'scuttlebutt') %>" );
    

    【讨论】:

    【解决方案3】:

    查看this question

    它指出 .js 文件不像 .erb 文件那样被解析。它们按原样传递。

    【讨论】:

    • 我意识到这一点。代码示例只是为了演示我正在尝试做的事情。
    猜你喜欢
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多