2012-08-02 20 views
8

を通じてjs.erbレンダリング、私はそうのようなAJAXを介してコントローラを呼んでいる私には

def index 
    render 'lightbox.js.erb' 
end 

ルートは、私が持っている:lighbox.js.erbで

resources :books do 
    member do 
    get :lightbox 
    end 
end 

は私が持っている:

alert("Hello world!"); 

何らかの理由により、アラートが呼び出されることはありません。サーバーやFirebug経由でエラーメッセージは表示されません。私は何が悪くなる可能性があるのか​​分からない。何か案は?

答えて

20

をそれはクライアント側にあることが判明し、私のJavaScriptは、私はルートファイルで

def script_action 
    render 'lightbox.js' 
end 

新しいアクションを作成示唆しますテキストとしてレンダリングされていました。私はコンソールフィードを見てこれを確認しました。それは言った:

Started GET "/books/lightbox?book=4&username=tbaron&_=1344009191129" for 127.0.0.1 at 2012-08-03 10:53:11 -0500 
Processing by BooksController#lightbox as text 

最後の2つの単語は、 "JSとして"読んでいるはずです。近づいた後、私はこれが驚くほど単純な解決につながったblog postを見つけました。 AJAX通話に「dataType:script」を追加してください。

$.ajax({ 
    type: 'GET', 
    url: '/books' 
    dataType : 'script' 
} 

ありがとうございました!あなたのindexアクションで

7

私はあなたがbooks.jsを呼び出す必要があるためそれがだと思う:

indexアクションで
$.ajax({ 
    type: 'GET', 
    url: '/books.js', 
    success: function(data) { 
    eval(data); 
    } 
} 

:それはまだdoesnの場合

def index 
    respond_to do |format| 
    format.js { render 'lightbox'} 
    end 
end 

そしてlightbox.js.erbアプリ/ビュー/ブック

にする必要がありますbooks/index.js firebug/chromeを使用して、サーバーがあなたに応答しているものを確認することもできます

+1

まだ運がありません。また、Firebugはサーバーが応答していることを示しています。私はAJAXに成功コールバックを入れて、トリガーしています。 – nullnullnull

+0

あなたは何を得ていますか? – muffinista

+0

私は応答として自分のコードを取得しています。なぜそれが誘発していないのだろうか? – nullnullnull

1

AJAX呼び出しは、Javaスクリプト

var post_params = {}; 
var action = '/books/script_action'; 

$.post(action, post_params).success(function (data) { 

    eval(data); 

}).error(function (data) { 

    alert("Erro to call a action controller"); 

}); 

にそして、これを試してみてください、あなたのコントローラであなたのアクションを呼び出すために、このスクリプトを試すことができます。

match "books/script_action/" => "books#script_action" 
0

コントローラにこれを追加してみてください:

respond_to :js 
0

は、レイアウトなしでレンダリング:

def index 
    respond_to do |format| 
    format.js { render 'lightbox', layout: false} 
end 

これは私のための仕事です。

0

これに遭遇し、単にjs.erbファイルで応答するコントローラアクションを呼び出す場合は、この方法で達成しました(Anthony Alberto's Awesome Answerの助けを借りて)。

コントローラーアクション

def some_action 
    .. 
    respond_to do |format| 
    format.js { render 'some_action' } 
    end 
end 

some_action.js.erb

... 
$('#someActionWrap').html('<%= j render "some/displaypartials/action_partial" %>') 
... 

Ajax呼び出し

var id = '<%= @someresource.id %>'; 
$.get('/someresource/' + id + '/action/', null, function(data){ 
    eval(data) 
}, 'script'); 
0

私は肝炎eはlink_toヘルパーの同様の問題ですが、これは、remote:trueを使用して修正されました

関連する問題