[解決済み] RailsがjQueryからのJSONを正しくデコードしない(配列が整数のキーを持つハッシュになる)。
質問
JSONオブジェクトの配列をjQueryでRailsにPOSTしようとすると、いつもこの問題が発生します。 配列を文字列化すると、jQueryが正しく動作していることがわかります。
"shared_items"=>"[{\"entity_id\":\"253\",\"position\":1},{\"entity_id\":\"823\",\"position\":2}]"
しかし、私はちょうど私がAJAXの呼び出しのデータとしてそれを配列に送信する場合、私は得る。
"shared_items"=>{"0"=>{"entity_id"=>"253", "position"=>"1"}, "1"=>{"entity_id"=>"823", "position"=>"2"}}
一方、プレーンな配列を送るとうまくいきます。
"shared_items"=>["entity_253"]
なぜRailsは配列をあの奇妙なハッシュに変えているのでしょうか?思い当たる理由は、ここに型がないのでRailsが内容を正しく理解できないからです(jQueryの呼び出しで設定する方法があるのでしょうか)。
Processing by SharedListsController#create as
ありがとうございました。
更新しました。
データを文字列ではなく、配列として送信し、配列は動的に
.push()
関数を使用して動的に作成されています。試しに
$.post
と
$.ajax
を指定しても、同じ結果になります。
どのように解決するのですか?
この問題に遭遇した人がよりよい解決策を求めている場合、.ajax 呼び出しで "contentType.を指定することができます。'application/json'" オプションを .ajax 呼び出しで指定すると、Rails は JSON オブジェクトを整数キー ハッシュとすべての文字列値に分解せずに適切にパースします。
つまり、要約すると、私の問題は、このようなことでした。
$.ajax({
type : "POST",
url : 'http://localhost:3001/plugin/bulk_import/',
dataType: 'json',
data : {"shared_items": [{"entity_id":"253","position":1}, {"entity_id":"823","position":2}]}
});
のように、Railsが解析する結果となりました。
Parameters: {"shared_items"=>{"0"=>{"entity_id"=>"253", "position"=>"1"}, "1"=>{"entity_id"=>"823", "position"=>"2"}}}
ここで、次のようにします(注:現在、javascriptオブジェクトを文字列化し、コンテンツタイプを指定しているので、railsはこの文字列をどのようにパースするのかがわかります)。
$.ajax({
type : "POST",
url : 'http://localhost:3001/plugin/bulk_import/',
dataType: 'json',
contentType: 'application/json',
data : JSON.stringify({"shared_items": [{"entity_id":"253","position":1}, {"entity_id":"823","position":2}]})
});
の結果は、Railsの素敵なオブジェクトになります。
Parameters: {"shared_items"=>[{"entity_id"=>"253", "position"=>1}, {"entity_id"=>"823", "position"=>2}]}
これはRails 3、Ruby 1.9.3で動作しています。
関連
-
[解決済み] jQueryです。簡単なオーバーレイを作成するにはどうすればよいですか?
-
[解決済み] jQueryでJavaScriptオブジェクトから選択する際に、オプションを追加する最も良い方法は何ですか?
-
[解決済み] jQuery データ属性の値に基づいて要素を検索する方法は?
-
[解決済み] Ruby/RailsでHashからキーを削除して残りのHashを取得する方法は?
-
[解決済み] jQuery.ajaxでmultipart/formdataを送信する。
-
[解決済み] Ajaxを使用して1つのフォームでデータとファイルの両方をアップロードする?
-
[解決済み] jQueryを使用して配列から特定の値を削除する方法
-
[解決済み】jQueryのテンプレートエンジン【終了しました
-
[解決済み】jQueryがリクエストボディに有効なjsonを投稿する。
-
[解決済み] JQueryを使わずに、JSONをサーバーに送信し、JSONを取得する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jQueryです。簡単なオーバーレイを作成するにはどうすればよいですか?
-
[解決済み] jQuery 複数のイベントで同じ関数を起動する
-
[解決済み] 複数のクラスを削除する(jQuery)
-
[解決済み] jQueryを使って「Please Wait, Loading...」というアニメーションを作成するにはどうすればよいですか?
-
[解決済み] jQuery: テーブルの行数を数える
-
[解決済み] jQueryでフォームフィールドをクリアする
-
[解決済み] jQueryの検証:デフォルトのエラーメッセージを変更する
-
[解決済み] jQueryを使用してDropDownListの値を設定するにはどうすればよいですか?
-
[解決済み] jQuery .onとhoverの使い分けは可能ですか?
-
[解決済み】jQuery:keyPress Backspaceが発射されない?