【问题标题】:Update a Rails 3 partial using AJAX (not a form)使用 AJAX 更新 Rails 3 部分(不是表单)
【发布时间】:2012-07-20 23:42:06
【问题描述】:

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

基本上,我有一个 show.html.erb 渲染一个像这样的部分:

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

位于 app/views/info/_latest 的部分文件

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

我只希望 latest_post div 每 30 秒更新一次。请帮忙!

【问题讨论】:

  • 快速想法:如果您使用 jQuery 代替,以每 30 秒运行一次(setInterval ?),然后替换内容?
  • @BenjaminTan 谢谢,我已经知道 setInterval 和 jQuery 部分,但试图了解使用 jQuery 的 AJAx 方法调用什么。

标签: ajax ruby-on-rails-3


【解决方案1】:

原来答案有点复杂:

第 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 步:使用您想要的任何内容创建上述部分(如果您不需要部分,您可以将 div 的全部内容写入 latest.js.erb 文件。)

第 4 步:将最新方法添加到您的 PostsController,定义 @user 等以供 latest.js.erb 使用。

第 5 步:将 get '/latest' 添加到您的 routes.rb

【讨论】:

  • 你把setInterval()函数放在哪里了?应用程序.js?或者在您的部分显示的页面中?
  • 好吧,我认为对此有一些不同的看法,但我在显示部分的页面上使用 content_for :head 来输出该页面所需的 javascript。
  • 嗨!我还在我拥有的类似problem 上设计了我的解决方案,我想知道当用户只是查看当前页面(需要刷新)时是否有任何方法可以调用 setInterval?我注意到无论您在哪个页面中,总是会调用 refresh
猜你喜欢
  • 2012-06-16
  • 2012-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 1970-01-01
相关资源
最近更新 更多