2010-08-30 47 views
3

我有一個評論控制器與索引和創建其他行動。這兩個操作都會響應html和js格式。我可以將javascript請求重定向到另一個javascript動作嗎?

每當我通過ajax獲得創建請求,我想添加新的評論,然後重定向到index.js,所以屏幕上的評論更新,而無需重新加載頁面。

這種事情在Chrome瀏覽器中的工作。但每當我試試這個在Firefox或IE瀏覽器,事實證明,從index.html中create.js土地重定向...

即使我強制重定向到被JS:

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

它出現在Firefox和IE的format.html中。

任何想法可能發生在這裏?

+0

是不是:格式=> JS應該是在polymorphic_path polymorphic_path([@ commentable,:評論]:格式=> 'JS') – hellvinz 2010-08-30 17:38:51

+1

正是它應該。事實證明,這種格式被正確強制,所以我在大多數操作中使用了redirect_to polymorphic_path([@ commentable,:comments],:format => request.format.to_sym)。一般的問題是,像Chrome或Safari這樣的Webkit瀏覽器在獲得302重定向時保留請求類型。 Firefox和IE在請求後忘記了類型,因此必須手動設置。 – mdrozdziel 2010-08-31 15:22:07

回答

1

瀏覽器處理302請求的方式有很多不同的問題。有些會丟失請求類型,有些則會丟失請求方法(示例票證:http://trac.tools.ietf.org/wg/httpbis/trac/ticket/160)。

我會建議,而不是重定向到一個新的URL時使用JS,你只需渲染相同的動作。因此,像這樣:

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 
相關問題