2012-07-20 49 views
5

我發現了許多關於在提交表單後使用Ajax更新部分的問題和解答。但我的問題是?更簡單?,我只是想每隔幾秒重新加載一次,並加載新數據。這真的不難,我記得在Rails 2.3中做了類似的事情,但我無法在任何地方找到答案。使用AJAX更新Rails 3部分(不是表單)

基本上,我有一個show.html.erb渲染的部分,像這樣:

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

/位於應用程序/視圖/信息的部分文件_latest

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

我只是想latest_post div每30秒更新一次。請幫忙!

+0

快速點子:如果你所使用的jQuery代替,運行在e極30秒(setInterval的?),而只需更換內容的時間? – 2012-07-21 02:55:35

+0

@BenjaminTan謝謝,我已經知道setInterval和jQuery部分,但試圖瞭解使用jQuery的AJAx方法調用什麼。 – you786 2012-08-03 18:34:30

回答

4

那麼事實證明,答案是有點複雜:

第1步:使用JavaScript的使用jQuery的$.get()函數加載一個頁面一起setInterval功能,說/users/1/posts/latest

setInterval(function(){ 
    $.get("https://stackoverflow.com/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

+0

你把'setInterval()'函數放在哪裏? application.js中?或者在你的部分頁面中顯示? – aguazales 2012-08-21 20:06:15

+0

對此我有一些不同的看法,但我使用content_for:head部分顯示在頁面上以輸出該頁面所需的JavaScript。 – you786 2012-08-21 20:21:51

+0

嗨!我也在類似的[問題]上構建了我的解決方案(https://stackoverflow.com/questions/48520865/refreshing-a-rails-partial-on-a-set-time-interval-using-ajax-and-jquery/ 48521196?noredirect = 1#comment84052148_48521196)我有,我想知道是否有任何方式來調用setInterval當用戶只是查看當前頁面(需要刷新)?我注意到_refresh_總是被調用,而不管你在哪個頁面。 – Whooper 2018-02-01 18:26:21