11

JavaScriptから、次のようにAJAXを介してコントローラーを呼び出しています。

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

私のコントローラーには次のものがあります。

def index
  render 'lightbox.js.erb'
end

私のルートでは:

resources :books do
  member do
    get :lightbox
  end
end

lighbox.js.erbには次のものがあります。

alert("Hello world!");

何らかの理由で、アラートが呼び出されることはありません。サーバーまたはFirebugのいずれからもエラーメッセージが表示されません。何がうまくいかないのか途方に暮れています。何か案は?

4

7 に答える 7

27

クライアント側では、JavaScriptがテキストとしてレンダリングされていたことがわかりました。コンソールフィードを見て、これを確認しました。と言いました:

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として」と読む必要があります。根付いた後、私はこのブログ投稿を見つけました。これは驚くほど簡単な解決策につながりました。「dataType:script」をAJAX呼び出しに追加します。

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

皆さん、助けてくれてありがとう!

于 2012-08-03T16:03:55.550 に答える
7

私はあなたが電話する必要があるからだと思いますbooks.js

$.ajax({
  type: 'GET',
  url: '/books.js',
  success: function(data) {
    eval(data);
  }
}

インデックスアクション:

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

そしてlightbox.js.erb、アプリ/ビュー/本にあるべきです

それでも機能しない場合は、電話をかけてみbooks/index.js てください。firebug/ chromeを使用して、サーバーがajax呼び出しに応答していることを確認することもできます。

于 2012-08-02T23:36:31.490 に答える
1

このスクリプトを試して、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");

});

そして、コントローラーでこれを試してください。新しいアクションを作成することをお勧めします

def script_action
  render 'lightbox.js'
end

ルートファイル内:

match "books/script_action/" => "books#script_action"
于 2012-08-03T00:04:01.197 に答える
0

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

respond_to :js
于 2012-08-03T04:53:10.933 に答える
0

インデックスアクションで、レイアウトなしでレンダリングします:</ p>

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

これは私にとっての仕事です。

于 2016-05-28T11:28:17.097 に答える
0

これに遭遇し、ファイルで応答するコントローラーアクションを呼び出したいだけの人のためにjs.erb、私はこの方法でそれを達成しました(AnthonyAlbertoのAwesomeAnswerの助けを借りて)。

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

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');
于 2017-10-19T23:17:36.570 に答える
0

link_toヘルパーにも同様の問題がありますが、これは次を使用して修正されましたremote:true

于 2017-11-06T21:15:20.387 に答える