【问题标题】:reloading a page after every 10 sec in rails 3.1在rails 3.1中每10秒重新加载一个页面
【发布时间】:2011-06-12 22:54:32
【问题描述】:

我有一个 rails 3.1rc4 应用程序,我想每 10 秒更新一次 index.html.erb 文件中的 div。我不知道这是否可以通过 jquery 完成?曾经有一种更新方法,但如果它仅用于原型,我不知道。任何样品都会很棒

【问题讨论】:

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


    【解决方案1】:

    将您的问题分解为子任务,这是您必须处理的:

    1. 检索 (HTTP GET) html
    2. 用检索到的 html 更新一个 div
    3. 每 10 秒重复第 1 步和第 2 步

    对于1,查看jquery的.get

    Description: Load data from the server using a HTTP GET request.

    对于 2,查看 jquery 的.html

    Get the HTML contents ... or set the HTML contents of every matched element.
    

    对于 3,请查看setInterval

    Summary
    Calls a function or executes a code snippet repeatedly, with a fixed time 
    delay between each call to that function. Returns an intervalID.
    

    最终解决方案,

    HTML 代码:

    <div id="divToChange"></div>
    

    Javascript 代码

      function update()
      { 
         $.get('/', function(data) 
         {
             $('#divToChange').html(data);
         });
      }
    $(document).ready(function($){
      window.setInterval('update()', 10*1000);
    });
    

    【讨论】:

    • 如果您的语法正确,请给我打电话。我不认为 setInterval 是最好的方法,因为服务器工作负载 setTimeout 是什么
    • 我试过了,它可以工作,但它正在创建另一个模板,其中包含我要重新加载的 div 内的一般应用程序布局。
    • 我试过了,但这次没有用。我的 url 是 root_url,它有 home 的控制器,也许我不知道如何适应它。
    • 我必须保持原样 $.get("/") 因为这是我正在使用的 url 必须找到一种方法来为 xhr 请求呈现单独的布局
    • 您可以在控制器中使用request.xhr?,或者检查格式,并使用正确的响应器(js 或 html)。
    【解决方案2】:

    我假设您熟悉 javascript,可能还熟悉 AJAX(如果您需要的话)。

    这段javascript使用了原生的setInterval函数,每隔10秒调用一次updateDiv函数。

    var timer = setInterval(updateDiv, 10000);
    
    function updateDiv() {
      // do update
    }
    

    编辑:没有 jQuery 的完整示例;

    <html>
      <head>
        <script type="text/javascript">         
          var index = 1;
    
          function updateDiv() {
            document.getElementById("updateMe").innerHTML = index++ + " " + new Date();
          }
    
          var timer = setInterval(updateDiv, 10000);
        </script>
      </head>
      <body>
        <div id="updateMe" />
      </body>
    </html>
    

    【讨论】:

    • 请我需要你注释掉的部分因为我对 javascripts 不是很好我只是不知道如何使用插件
    • 它可以工作,但只需使用 div id 而不是时间。我尝试重新加载 div 中的项目,但没有成功。
    猜你喜欢
    • 2013-12-06
    • 2011-04-28
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 2014-10-02
    • 1970-01-01
    • 2016-03-10
    相关资源
    最近更新 更多