我有以下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[]">
我检查前两个选项,并通过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显示已经发布的数据:
选项> <我>选择% 5 b % 5 d = options_1&选择% 5 b % 5 d = options_2到目前为止,一切顺利。
在myfile.php中,post变量如下所示:
$options = $_POST['options'];
现在,当我回显$options时,我得到这个:
"options[]=options_1&options;[]=options_2"
第二对括号前面的分号是从哪里来的?这快把我逼疯了。
我已经对POST数据使用了utf8_decode以及urldecode和rawurldecode。没有什么变化。我还像这样转义了ajax调用中的方括号:
data: {
'options':$('input[name="options''['']"]').serialize()
},
那也没用。有什么想法吗?
我>我有这个确切的问题,我只能通过使用". serializearray()"来让它工作,我希望这是你正在寻找的。
data: {
'options':$('input[name="options[]"]').serializeArray()
},
对于我来说,这输出与GET请求相同格式的标准字符串。
我建议从html名称中删除[],这是糟糕的设计。在jQuery或PHP方面也可能存在问题。我看不出你的代码有其他问题。
HTML Name属性中允许使用哪些字符?
HTML中id属性的有效值是什么?
为什么每个输入元素都使用括号[]和相同的名称?如果我说对了,你可以通过换行元素序列化。
<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()
},
您可能想要读取this并尝试如下:
data: {
'options':$('input[name="options[]"]').replace('%5B%5D', '[]')
},
或
$.param(obj, true);
$.param
中的true
表示应该使用传统的序列化对象的方法。传统方法在遇到相同的参数名时不使用方括号。