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[]">  

我检查前两个选项并通过 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 变量:

$options = $_POST['options'];

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

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

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

我已经在 POST 数据以及urldecoderawurldecode上使用了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 名称属性中允许使用哪些字符?
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 回答