すべてのフォーム値を取得し、特定の変数または配列を使用して複数選択をシリアル化するにはどうすればよいですか?出力パラメータは;でなければなりません。
id=1&name_1=John&name_2=Juan&name_3=Isabel&name_4=Doe
名前が複数選択されている場合
この回答が示すように、jQueryは、次の方法でシリアル化するときに、各選択のキーと同じ「名前」の値を使用します$(form).serialize()
。
id=1&name=John&name=Juan&name=Isabel&name=Doe
そしてそれを処理する方法を理解するのはサーバー次第です。サーバーがそれをうまく処理する可能性があります。
あなたが言及したフォーマットが絶対に必要な場合は、次のようなものを使用して一緒にハックできるはずです(テストされていません):
var elementArray = $(form).serializeArray();
var modifiedArray = [];
var counts = {};
var multipleValues = {};
$.each(elementArray, function(index, value) {
if (counts[value.name]){ counts[value.name] += 1; } else { counts[value.name] = 1; }
});
$.each(elementArray, function(index, value) {
if (multipleValues[value.name] || counts[value.name] > 1){
if (!multipleValues[value.name]) { multipleValues[value.name] = 0; } else { multipleValues[value.name] += 1; }
modifiedArray.push({name: value.name + "_" + multipleValues[value.name], value: value.value});
} else {
modifiedArray.push({name: value.name, value: value.value});
}
});
var result = $.param(modifiedArray);
PHPは、同じ名前の複数のリクエスト値を処理しません。それらを配列として投稿できます。これを行うには、html要素の名前タグの最後に[]を追加するだけです。
user[]=John&user[]=Bill&user[]=Adam
PHPでは次のようになります。
配列 (( [ユーザー]=>配列 (( [0]=>ジョン [1]=>ビル [2]=>アダム )。 )。