2010-08-30 1 views
3

У меня есть контроллер комментариев с индексом и создание действий среди других. Оба эти действия отвечают форматам html и js.Могу ли я перенаправить на запрос javascript к другому действию javascript?

Когда я получил запрос на создание через ajax, я хотел бы добавить новый комментарий, а затем перенаправить на index.js, поэтому комментарии на экране обновляются без перезагрузки страницы.

Подобные вещи работают в Chrome. Но всякий раз, когда я пытаюсь это в Firefox или IE, то получается, что редирект из create.js земель в index.html ...

Даже когда я заставить перенаправлять быть ЯШ:

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

Он попадает в формат .html в Firefox и IE.

Любая идея, что может случиться здесь?

+0

Не: Формат => JS должен быть в polymorphic_path polymorphic_path ([@ commentable, комментарии:]: Формат => 'JS') – hellvinz

+1

Именно он должен. Оказалось, что этот формат форматируется должным образом, поэтому в большинстве действий я использовал redirect_to polymorphic_path ([@ commentable,: comments],: format => request.format.to_sym). Общая проблема заключается в том, что браузеры Webkit, такие как Chrome или Safari, сохраняют тип запроса, когда получат перенаправление 302. Firefox и IE забывают тип после запроса, поэтому он должен быть установлен вручную. – mdrozdziel

ответ

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 
Смежные вопросы