2

コントローラーは、POST 要求を介して、AJAX を使用して押されたボタンに応じて異なるページを表示する必要があります。

# POST /site_device/1
def show_page
     @site_device = SiteDevice.find(params[:id])
     respond_to do |format|
         format.js
         format.json { STDERR.puts "JSON!"; render 'show_page.js.erb'  }
    end
end

コントローラー コード #show page が実行され、json ビュー テンプレート (下記) が呼び出されます。

<% STDERR.puts "got_here" %>
$('#device-data').html("<h1>Foo!</h1>" ).trigger('create');

STDERRサーバー上で行が出力されているため、上記のコードが呼び出されていることがわかります。

ブラウザー (Chrome) では、コンソールを使用して、ビュー テンプレートのコードが正しく実行されるかどうかをテストできます。実際に実行$('#device-data').html("<h1>Foo!</h1>" ).trigger('create');されます。Google Chrome コンソールに入ると、html が「Foo!」で再レンダリングされます。正しい場所に。

ただし、ここに当惑するビットがあります。サーバーで実行されているコードがブラウザで受信されていないように見えるか、受信されている場合でも、実行されていないか、レンダリングされていません。

他の誰かに同様の問題/問題がありましたか?

4

1 に答える 1

1

推測を危険にさらすために、 ajax 関数が持っている場合dataType: 'JSON'、応答は受け取りますが実行しません。設定dataType: 'script'するとレスポンスが実行されます。

これが答えでない場合は、ajax 関数を投稿してください。

于 2012-11-12T15:27:07.993 に答える