13

rails remote: true パラメーターを使用して ajax リクエストを送信するときに、JSON オブジェクトが返されるように指定するにはどうすればよいですか? JSON オブジェクトが返されたら、それをキャッチして使用するにはどうすればよいでしょうか?

4

2 に答える 2

14

詳細に応じて、これに答える方法はたくさんあります (例: jquery と UJS アダプターを使用している) が、プロセス全体をよりよく理解するために自分で使用しているドキュメントから内容を投稿します: I use this Great大部分の投稿:現在、私自身もこの問題に取り組んでいるため、回答を更新します。

次のように data-type 属性を DOM 要素に追加できます。

<%= link_to "Add a new task", new_project_task_path(@project), "data-type" => "json", :id => "add_task_btn" %>

jQuery のグローバルな $.ajaxSetup() 関数でデフォルトの dataType を定義することもできます。すべての Ajax リクエストを変更します。

$.ajaxSetup({
      dataType: 'json'
});

3 番目の方法は beforeSend コールバックにあります。

$(“#add_some_button”).live(“ajax:beforeSend”, function(e, xhr, settings){
        new_data_type = “application/json, text/javascript, */*; q=0.01”;
        xhr.setRequestHeader('accept', new_data_type);
})

(q=0.01 は 0 と 1 の間の優先順位です)

そのため、必要に応じてその dataType プロパティと HTTP ヘッダーを変更できます。参考までに、可能な MIME タイプのリストを次に示します。

特定の JavaScript メディア タイプ リスト:ここ

サーバーから送り返されるデータ形式の概要: 1.) Ajax は、目的の MIME タイプに設定された Accept ヘッダーを使用して要求を送信します。2.) Rails Controller は、Accept ヘッダーをチェックして、何を返す必要があるかを判断します。3.) コントローラは、アクションが特定の MIME タイプを処理するかどうかを決定します。Rails 3 では、respond_with を使用できます。3.0 より前は、コントローラー アクションで Respond_to ブロックです。

Rails 3.1 で Ajax を使用する方法の概要:

現在推奨される方法は、デフォルトの dataType をスクリプトとして使用し、js.erb または js.coffee ファイルで AJAX リクエストを処理することだと思います。

オプション: 1.) クリック イベント: DOM 要素の挿入 2.) Ajax によるフォームの送信 3.) Ajax による削除 4.) Ajax によるクライアント側の検証 (入力フィールドで data-remote を使用) 5.) 動的選択の追加(選択フィールドで data-remote を使用) 6.) Ajax ページネーション – HTML を直接返します。 

繰り返しますが、ここに含めているのは私自身の概要/レビューです。詳細については、Andrea Singh のすばらしい投稿をご覧ください

于 2012-06-13T21:45:13.780 に答える
-4

これを試してください:

アプリ/コントローラー/examples.rb

class ExamplesController < ApplicationController
    def new
        @my_json = { :message => "Hello json"}
    end
end

アプリ/ビュー/例/new.html.haml

= link_to "New", new_examples_path :remote => true

アプリ/ビュー/例/new.js.erb

console.log("<%= @my_json %>");
console.log("<%= @my_json['message'] %>");
于 2012-06-16T17:21:08.113 に答える