8

私は次のHTMLを持っています:

<input type="checkbox" id="options_1" value="options_1" name="options[]">  
<input type="checkbox" id="options_2" value="options_2" name="options[]">  
<input type="checkbox" id="options_3" value="options_3" name="options[]">  

最初の 2 つのオプションを確認し、jQuery の ajax 経由でサーバーに送信します。

$.ajax({
    type: "POST",
    url: "myfile.php",
    data: {
        'options':$('input[name="options[]"]').serialize()
    },
    dataType: 'json',
    beforeSend: function(){
           //do some stuff
    },
    success: function(msg){
        //do some stuff
    }
});

Firebug には、投稿されたデータが表示されます。

options options%5B%5D=options_1&options%5B%5D=options_2
ここまでは順調です。

myfile.php では、次のように POST-Variable を取得します。

$options = $_POST['options'];

$options を echo すると、次のようになります。

"options[]=options_1&options;[]=options_2"

2 番目の括弧のペアの前にあるこのセミコロンはどこから来たのですか? これは私を夢中にさせています。

urldecoderawurldecodeだけでなく、POST データでも既にutf8_decodeを使用しています。何も変わりません。また、次のように ajax 呼び出しで角かっこをエスケープしました。

data: {
    'options':$('input[name="options\\[\\]"]').serialize()
},

それも役に立ちませんでした。アイデアはありますか?

4

4 に答える 4

2

私はまさにこの問題を抱えており、「.serializeArray()」を使用してのみ機能させることができました。これがあなたが探していたものであることを願っています.

data: {
    'options':$('input[name="options[]"]').serializeArray()
},

私にとって、これはGETリクエストと同じ形式で標準文字列を出力します。

于 2012-07-18T15:25:51.757 に答える
1

[] を HTML 名から削除することをお勧めします。これはデザインが悪いためです。jQuery 側または PHPにも問題がある可能性があります。あなたのコードには他に問題はありません。

HTML の Name 属性で使用できる文字は?
HTML の id 属性の有効な値は何ですか?

于 2012-12-17T09:06:26.153 に答える
0

これを読んで、これを試してみてください:

data: {
        'options':$('input[name="options[]"]').replace('%5B%5D', '[]') 
    },

またはこれ

$.param(obj, true);

true$.param、オブジェクトをシリアル化する従来の方法を使用する必要があることを示します。従来の方法では、同じパラメーター名に遭遇したときに角括弧を使用しません。

于 2013-08-01T09:40:57.223 に答える
0

各入力要素に括弧 [] と同じ名前を使用するのはなぜですか? 私が正しければ、ラッピング要素でシリアル化できます..

<form id="options">
    <input type="checkbox" id="options_1" value="options_1" name="option1" />  
    <input type="checkbox" id="options_2" value="options_2" name="option2" />  
    <input type="checkbox" id="options_3" value="options_3" name="option3" />  
</form>

したがって、次のようにシリアル化できます

data: {
    'options':$('#options').serialize()
},
于 2011-04-05T18:15:09.883 に答える