2012-07-20 2 views
5

J'ai trouvé un certain nombre de questions et de réponses concernant la mise à jour partielle d'Ajax après l'envoi d'un formulaire. Mais ma question est "plus simple", je veux juste recharger un partiel toutes les quelques secondes et charger dans les nouvelles données. Cela ne peut vraiment pas être difficile du tout, et je me souviens de faire quelque chose de similaire dans Rails 2.3 mais je ne trouve pas la réponse nulle part.Mettre à jour un Rails 3 partiel en utilisant AJAX (pas un formulaire)

Fondamentalement, j'ai un show.html.erb rendu une partie comme ceci:

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

Le fichier partiel situé à app/views/info/ _Travaux Récents

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

Je veux juste la latest_post div à mettre à jour toutes les 30 secondes. S'il vous plaît aider!

+0

Idée rapide: Que faire si vous avez utilisé jQuery à la place, exécutez une fois à e très 30 secondes (setInterval?), Et il suffit de remplacer le contenu? –

+0

@BenjaminTan Merci, je connaissais déjà la partie setInterval et jQuery, mais j'essayais de comprendre comment appeler en utilisant les méthodes AJAx de jQuery. – you786

Répondre

4

Eh bien il se trouve la réponse est un peu compliqué:

Etape 1: Utilisez la fonction de setInterval Javascript avec la fonction jQuery $.get() pour charger une page, par exemple /users/1/posts/latest.

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

Étape 2: Créer un latest.js.erb et le mettre dans votre dossier app/views/posts.

Contenu de latest.js.erb:

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

Étape 3: Créez ci-dessus partielle avec tout ce que vous voulez (si vous n'avez pas besoin partiel, vous pouvez simplement écrire le contenu de la div dans la fichier latest.js.erb)

Étape 4:. Ajouter une dernière méthode à votre PostsController, qui définit @user, etc. pour le latest.js.erb à utiliser.

Étape 5: Ajouter get '/latest' à votre routes.rb

+0

Où avez-vous mis la fonction 'setInterval()'? application.js? Ou dans la page votre partiel est affiché? – aguazales

+0

Eh bien, il ya des opinions divergentes à ce sujet, mais j'ai utilisé content_for: tête sur la page, le partial est affiché pour afficher le javascript dont j'ai besoin pour cette page. – you786

+0

Salut! J'ai également modelé ma solution sur un [problème] similaire (https://stackoverflow.com/questions/48520865/refreshing-a-rails-partial-on-a-set-time-interval-using-ajax-and-jquery/ 48521196? Noredirect = 1 # comment84052148_48521196) que je reçois et je me demande s'il y a un moyen d'appeler le setInterval quand l'utilisateur ne voit que la page en cours (qui doit être rafraîchie)? J'ai remarqué que le _refresh_ est toujours appelé quelle que soit la page dans laquelle vous vous trouvez. – Whooper

Questions connexes