2010-08-30 49 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 
相关问题