2010-08-30 5 views
3

J'ai un contrôleur de commentaires avec index et créer des actions parmi d'autres. Ces deux actions répondent au format html et js.Puis-je rediriger vers une requête javascript vers une autre action javascript?

Chaque fois que je recevais une requête via ajax, je souhaitais ajouter un nouveau commentaire, puis rediriger vers index.js, afin que les commentaires à l'écran soient mis à jour sans recharger la page.

Ce genre de chose fonctionne mal dans Chrome. Mais chaque fois que j'essaie ceci dans Firefox ou IE, il se trouve, que la redirection des terres create.js dans index.html ...

Même quand je force la redirection soit js:

redirect_to polymorphic_path([@commentable, :comments]), :format => 'js' 

Il atterrit dans le format.html dans Firefox et IE.

Une idée de ce qui pourrait se passer ici?

+0

Is not: format => js censés être polymorphic_path polymorphic_path ([@ commentable,: commentaires]: format => 'js') – hellvinz

+1

exactement il se doit. Il s'est avéré que le format de cette façon est correctement forcé, donc j'ai utilisé redirect_to polymorphic_path ([@ commentable,: comments],: format => request.format.to_sym) dans la plupart des actions. Le problème général est que les navigateurs Webkit comme Chrome ou Safari conservent le type de requête lorsqu'ils reçoivent la redirection 302. Firefox et IE oublient le type après la requête, il faut donc le configurer manuellement. – mdrozdziel

Répondre

1

Il existe différents problèmes liés à la manière dont les navigateurs gèrent différemment 302 requêtes. Certains perdent des types de requêtes, d'autres perdent la méthode de requête (un exemple de ticket: http://trac.tools.ietf.org/wg/httpbis/trac/ticket/160).

Je suggère que plutôt que de rediriger vers une nouvelle URL lors de l'utilisation de JS, il vous suffit de rendre la même action. Donc, quelque chose comme ceci:

class CommentsController < ApplicationController 
    def index 
    setup_for_index 
    respond_to :html, :js 
    end 

    def create 
    # Creation stuff... 
    respond_to do |format| 
     format.html {redirect_to :action => :index} 
     format.js do 
     setup_for_index 
     render :action => :index 
     end 
    end 
    end 

    private 

    def setup_for_index 
    @comments = ... 
    end 
end 
Questions connexes