2012-07-20 20 views
5

Bir form gönderdikten sonra Ajax kullanarak bir kısmi güncelleştirme ile ilgili bir dizi soru ve yanıt buldum. Ama sorumuz daha basit? Sadece birkaç saniyede bir kısmi yeniden yüklemek ve yeni veriyi yüklemek istiyorum. Bu gerçekten hiç de zor olamaz ve Rails 2.3'te benzer bir şey yaptığımı hatırlıyorum ama cevabı hiçbir yerde bulamıyorum.Bir Rails 3 kısmi AJAX kullanarak (bir form değil) güncelleştirin

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

app/views/bilgi bulunan kısmi dosya/_latest

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

Sadece istiyorum: Temelde

, bir show.html.erb şöyle kısmi render var latest_post div her 30 saniyede bir güncellenecektir. Lütfen yardım et!

+0

Hızlı Idea için get '/latest' ekle: yerine jQuery kullanılan ne olur, e çok 30 saniye (? SetInterval) ve sadece yerine içerik bir çalışma süresi? –

+0

@BenjaminTan Teşekkürler, setInterval ve jQuery bölümlerini zaten biliyordum, ama jQuery'nin AJAx yöntemlerini kullanarak ne arayacağımı anlamaya çalışıyordum. – you786

cevap

4

Peki bu cevabı çıkıyor biraz karmaşık:

Adım 1: Bir sayfayı yüklemek için jQuery'nin $.get() fonksiyonu ile birlikte kullanın JavaScript'ın setInterval fonksiyonu /users/1/posts/latest söylüyorlar.

setInterval(function(){ 
    $.get("https://stackoverflow.com/users/1/posts/latest.js", function(data){ 
    $("latest_post").html(data); 
    }, 
    "html") 
}, 30000); 

Adım 2: Bir latest.js.erb oluşturun ve app/views/posts klasöre koyun. latest.js.erb ait

İçindekiler:

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

Adım 3: Eğer sadece div tüm içeriğini yazabilir, kısmi gerekmiyorsa sen (istediği kadar yukarıda kısmi oluştur latest.js.erb dosyası)

Adım 4:. latest.js.erb kullanmak için bunu vs. @user tanımlar, senin PostsController bir son yöntemi ekleyin.

Adım 5: routes.rb

+0

'setInterval() işlevini nereye koydunuz? application.js? Veya sayfada kısmi görüntülenir? – aguazales

+0

Bunun hakkında bazı farklı görüşler var, ama ben content_for kullandım: sayfadaki head kısmi, o sayfa için gereken javascript'i çıktı olarak görüntüleniyor. – you786

+0

Merhaba! Ben de benzer bir problemi çözdüm (https://stackoverflow.com/questions/48520865/refreshing-a-rails-partial-on-a-set-time-interval-using-ajax-and-jquery/ 48521196? Noredirect = 1 # comment84052148_48521196) sahip olduğum ve kullanıcı sadece geçerli sayfayı görüntülediğinde (yenilenmesi gereken) setInterval için herhangi bir yol olup olmadığını merak ediyorum? Hangi sayfada bulunduğunuzdan bağımsız olarak _refresh_ öğesinin her zaman çağrıldığını fark ettim. – Whooper