2011-10-24 28 views
3

こんにちは私は、jQuery UJSを使ってリモートで提出するフォームを用意しています。 beforeSendイベントにバインドして、サーブに送信するデータを変更できるようにしました。動いていない。ここに私が前に持っているものがあります。beforeSendイベントでajax投稿データを変更する方法は?

settings.data = JSON.stringify({ 
     'list_item[title]' : 'hi?? there' 
}) 

これは機能しません。サーバログでは、次のように表示されます。

Started POST "/lists/9/list_items" for 127.0.0.1 at 2011-10-24 14:04:36 -0700 
    Processing by ListItemsController#create as JSON 
    Parameters: {"{\"list_item"=>{"title"=>{"\":\"hi?? there\"}"=>nil}}, "list_id"=>"9"} 

私は間違っていると思いますか?フォームにないフィールドを追加してsettings.dataをカスタマイズしたいと思います。ありがとう

答えて

2

settings.dataに入れるために何かをストリンガーする必要はありません。 The data is

サーバーに送信するデータ。まだ文字列でない場合は、クエリ文字列に変換されます。これはGETリクエストのURLに追加されています。 [...]オブジェクトはキー/値のペアでなければなりません。

あなたがやっていることは、この文字列を入れている

data

"{"list_item[title]":"hi?? there"}" 

が、物事が混乱しようとしているので、その文字列は、クエリ文字列ではありません。あなたは、単にsettings.dataにJavaScriptのオブジェクトを割り当てることができる必要があります:

settings.data = { 'list_item[title]' : 'hi?? there' }; 

とjQueryがあるからそれを整理してみましょう。


証拠はなく、ドキュメンテーションに基づいて更新:

しかし、さらなる調査が、これは動作しないことが明らかになりました。私はGETリクエストを送信した場合、私はsettings.dataに加えた変更は無視されますが、私はPOSTリクエストを送信した場合、その後、settings.dataスティックに変化していますがを通じて賢明な何かを得るために、クエリ文字列の形式を使用する必要があります。

settings.data = encodeURIComponent('list_item[title]') 
       + '=' 
       + encodeURIComponent('hi?? there'); 

サーバー上の

Parameters: {"list_item"=>{"title"=>"hi?? there"}} 

、それはあなたが後にしているもののように見えます:POSTリクエストと組み合わせsettings.dataのバージョンは私にこれを取得します。元のパラメータの一部を保持する場合は、クエリ文字列を手作業で解凍して再パックする必要があります。

+0

おかげで、私はsettings.data = {'list_item [title]': 'hi ??そこ' };しかし、私はログでこれを見ています:パラメータ:{"オブジェクトオブジェクト" => nil、 "list_id" => "9"} I – AnApprentice

+0

@AnApprentice:私はいくつかの調査を行った、jQueryはむしろ "設定.data'の変更は 'beforeSend'コールバックに関係していますので、私の更新を見てください。 –

関連する問題