3 votes

Afficher les données après l'appel AJAX, comment les rendre dans le contrôleur?

Je voudrais utiliser link_to pour appeler une action du contrôleur nommée show. Cela fonctionne, je reçois un message 200. Maintenant, je veux mettre à jour un div avec le contenu qui est renvoyé.

Code dans le contrôleur:

respond_to do |format|
  format.html # show.html.erb
  format.js 
 end

Code dans la vue, le lien et le JavaScript:

<%= link_to "Afficher l'analyse", company_comparison_path(3), :remote => true , :id => "thelink" %>

 sera remplacé 

$('#thelink').bind('ajax:complete', function() {  
        $('#replaced').html(data)
});  

Je crois que je ne comprends toujours pas comment renvoyer correctement l'HTML ou le JavaScript depuis le contrôleur dans le JavaScript. Si je remplace le mot "data" dans le JavaScript par un texte entre parenthèses, j'obtiens une sortie correcte. Mais comment obtenir le résultat de l'action du contrôleur?

3voto

Peter Duijnstee Points 2501

Vous étiez presque là, mais vous devez indiquer à la fonction liée quel est le contenu html réel que vous souhaitez insérer dans votre div #results. Lorsque vous appelez .html() sur $('#replaced'), la variable que vous utilisez (data) est toujours indéfinie.

Essayez ce qui suit :

$('#thelink').bind('ajax:complete', function(event, data) {
  $('#replaced').html(data.responseText);
}); 

éditer : Oh, gardez à l'esprit que cela pourrait afficher votre vue incluant la mise en page, ce qui n'est probablement pas ce que vous voulez. Vous pouvez ajouter quelque chose comme render layout: false if request.xhr? à votre contrôleur pour empêcher la mise en page de s'afficher lors des requêtes ajax.

1voto

Blue Smith Points 2106

Si vous souhaitez retourner un contenu plus riche à partir de la réponse AJAX, vous pouvez rendre la vue depuis le contrôleur à l'aide de la méthode :render_to_string.

En savoir plus : http://apidock.com/rails/ActionController/Base/render_to_string

respond_to do |format|
  format.html # show.html.erb
  format.js {
    @content = render_to_string(:partial => 'some_partial_view')
  }
 end

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X