こんにちは、 Validateの submitHandler内で ajax を使用してフォームを送信しようとしています。複数の選択を美化するChosenライブラリも使用しています。以下の作品:
submitHandler: function(form) {
var form = $(this.currentForm);
var data = {
first_name : form.find('#first_name').attr('value'),
last_name : form.find('#last_name').attr('value'),
chosen_people : form.find('#chosen_people').val(),
};
$.ajax({
type : "POST",
url : "formhandler.php",
data : data,
success : function(response) {
console.log(response);
}
});
}
サーバーの応答:
array(
['first_name'] => 'John'
['last_name'] => 'Smith'
['chosen_people'] => array(
[0] => 37
[1] => 42
)
)
問題は、フォームが大きくて頻繁に変更されるため、すべての入力要素と選択要素を列挙し続ける必要がないことです。私はちょうど次のようなことを言いたい:
var inputs = form.find('input').serializeArray();
var selects = form.find('.chzn-select').val();
var data = $.merge(inputs, selects );
...
次のような手動で入力することのすべての組み合わせを試しました。
for(var select in selects)
selects[select] = {'name' : select, 'value' : selects[select]};
var serializedSelects = {'name' : 'chosen_people', 'value' : selects };
var data = $.merge(inputs, serializedSelects);
しかし、サーバーがポスト変数に正しい配列構造を持つように、配列を適切にネストすることはできません。
問題の要点は、jQuery は要素に対して $.serializeArray() を提供しますが、連想配列を取得してそれをシリアル化された配列に変換する $.paramArray() のようなものを提供しないことです。出力できるのはシリアル化された文字列のみであり、これ以上の操作は困難です。別の ajax フレームワークを含めたくないので、簡単な解決策があることを願っています。
PS私はphp5とjQuery 1.8.3を使用しています。これが私がこれまでに見つけたものです。おそらく、追加しようとする前にselects配列のフォーマットを台無しにしているだけです:
jQuery post() でシリアライズと追加データを使用
Jquery.SerializeArrayにパラメータを追加する方法は?
ありがとう!