如果我在名称中带方括号的输入上使用jQuery serialize(),为什么会出现这个分号?

And*_*eas 8 php ajax jquery serialization brackets

我有以下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[]">  
Run Code Online (Sandbox Code Playgroud)

我检查前两个选项并通过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
    }
});
Run Code Online (Sandbox Code Playgroud)

Firebug向我显示已发布的数据:

期权 期权%5B%5D = options_1&options%5B%5D = options_2
到目前为止,非常好.

在myfile.php中我得到了如下的POST变量:

$options = $_POST['options'];
Run Code Online (Sandbox Code Playgroud)

现在,当我回显$ options时,我得到了这个:

"options[]=options_1&options;[]=options_2"
Run Code Online (Sandbox Code Playgroud)

第二对括号前面的分号是从哪里来的?这真让我抓狂.

我已经在POST数据上使用了utf8_decode以及urldecoderawurldecode.没有什么变化.我还逃过了ajax调用中的方括号,如下所示:

data: {
    'options':$('input[name="options\\[\\]"]').serialize()
},
Run Code Online (Sandbox Code Playgroud)

这也没有帮助.任何人的想法?

Sam*_*ers 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>
Run Code Online (Sandbox Code Playgroud)

所以你可以像这样序列化

data: {
    'options':$('#options').serialize()
},
Run Code Online (Sandbox Code Playgroud)