2012-07-20 19 views
5

Ho trovato una serie di domande e risposte sull'aggiornamento parziale utilizzando Ajax dopo aver inviato un modulo. Ma la mia domanda è "più semplice", voglio solo ricaricare un parziale ogni pochi secondi e caricare i nuovi dati. Questo in realtà non può essere affatto difficile, e ricordo di aver fatto qualcosa di simile in Rails 2.3 ma non riesco a trovare la risposta da nessuna parte.Aggiornare un partial Rails 3 utilizzando AJAX (non un modulo)

Fondamentalmente, ho uno show.html.erb rendering di una parziale in questo modo:

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

Il file parziale trova in app/views/informazioni/_latest

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

Voglio solo il latest_post div da aggiornare ogni 30 secondi. Per favore aiuto!

+0

Idea rapida: cosa succede se si è utilizzato jQuery, invece, eseguire un momento in gni 30 secondi (setInterval?), E basta sostituire il contenuto? –

+0

@BenjaminTan Grazie, sapevo già della parte setInterval e jQuery, ma stavo cercando di capire cosa chiamare usando i metodi AJAx di jQuery. – you786

risposta

4

Ebbene si scopre la risposta è un po 'complicato:

Fase 1: la funzione setInterval di utilizzare JavaScript con la funzione $.get() di jQuery per caricare una pagina, diciamo /users/1/posts/latest.

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

Fase 2: Creazione di un latest.js.erb e metterlo nella cartella app/views/posts.

Contenuto del latest.js.erb:

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

Passaggio 3: Creare il parziale di cui sopra con tutto ciò che desideri (se non è necessario un parziale, si può semplicemente scrivere l'intero contenuto del div nella latest.js.erb file)

Fase 4:. Aggiungere un ultimo metodo per la vostra PostsController, che definisce @user, ecc per il latest.js.erb da usare.

Fase 5: Aggiungere get '/latest' al routes.rb

+0

Dove hai messo la funzione 'setInterval()'? application.js? O nella pagina in cui è visualizzato il tuo parziale? – aguazales

+0

Beh, ci sono alcune opinioni divergenti su questo, ma ho usato content_for: sulla pagina il partial è visualizzato per emettere il javascript di cui ho bisogno per quella pagina. – you786

+0

Ciao! Ho anche modellato la mia soluzione su un [problema] simile (https://stackoverflow.com/questions/48520865/refreshing-a-rails-partial-on-a-set-time-interval-using-ajax-and-jquery/ 48521196? Noredirect = 1 # comment84052148_48521196) che sto avendo e mi chiedo se c'è un modo per chiamare setInterval quando l'utente sta solo visualizzando la pagina corrente (che deve essere aggiornata)? Ho notato che _refresh_ viene sempre chiamato indipendentemente dalla pagina in cui ti trovi. – Whooper

Problemi correlati