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以及urldecode和rawurldecode.没有什么变化.我还逃过了ajax调用中的方括号,如下所示:
data: {
'options':$('input[name="options\\[\\]"]').serialize()
},
Run Code Online (Sandbox Code Playgroud)
这也没有帮助.任何人的想法?
为什么对每个输入元素使用括号 [] 和相同的名称?如果我理解正确,您可以通过包装元素进行序列化。
<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)