使用AJAX(非表单)更新Rails 3部分

使用AJAX(非表单)更新Rails 3部分,ajax,ruby-on-rails-3,Ajax,Ruby On Rails 3,在提交表单后,我发现了许多关于使用Ajax更新分部的问题和答案。但我的问题是?更简单?我只想每隔几秒钟重新加载一部分并加载新数据。这真的一点也不难,我记得在Rails2.3中做过类似的事情,但我在任何地方都找不到答案 基本上,我有一个show.html.erb来呈现一个部分,如下所示: <div id="latest_post"> <%= render :partial=>'info/latest', :object=>@user, :as=>:use

在提交表单后,我发现了许多关于使用Ajax更新分部的问题和答案。但我的问题是?更简单?我只想每隔几秒钟重新加载一部分并加载新数据。这真的一点也不难,我记得在Rails2.3中做过类似的事情,但我在任何地方都找不到答案

基本上,我有一个show.html.erb来呈现一个部分,如下所示:

<div id="latest_post">
    <%= render :partial=>'info/latest', :object=>@user, :as=>:user %>
</div>

'info/latest',:object=>@user,:as=>:user%>
位于app/views/info/\u的最新部分文件

<% post = user.posts.last %>
<h1>Last Post</h1>
<p><%= post.content %></p>

最后一篇文章


我只想每30秒更新一次最新的发布div。请帮忙

答案有点复杂:

步骤1:使用Javascript的
setInterval
函数和jQuery的
$.get()
函数加载页面,比如
/users/1/posts/latest

setInterval(function(){
  $.get("/users/1/posts/latest.js", function(data){
    $("latest_post").html(data);
  },
  "html")
}, 30000);
步骤2:创建一个
latest.js.erb
并将其放入
app/views/posts
文件夹中

latest.js.erb的内容

<%= render partial: 'posts/latest', object: @user.posts.last, as: :post %>

步骤3:创建上面的partial(如果不需要partial,可以将div的全部内容写入
latest.js.erb
文件)

步骤4:将最新方法添加到
PostsController
,该方法定义
@user
等供
latest.js.erb
使用


步骤5:将
get'/latest'
添加到您的
路由。rb

快速想法:如果您改用jQuery,每30秒运行一次(setInterval?),然后只替换内容,该怎么办?@BenjaminTan谢谢,我已经知道setInterval和jQuery部分,但是我试图理解使用jQuery的AJAx方法调用什么。您将
setInterval()
函数放在哪里了?application.js?或者在显示部分的页面中?我想在这方面有一些不同的意见,但我使用了内容_:在显示部分的页面上的head来输出该页面所需的javascript。嗨!我还将我的解决方案建立在一个类似的模式上,我想知道当用户正在查看当前页面(需要刷新)时,是否有任何方法可以调用setInterval?我注意到不管你在哪个页面,刷新总是被调用的。