使用jquery发布复选框数据

使用jquery发布复选框数据,jquery,html,checkbox,Jquery,Html,Checkbox,我有一些像这样的html剪报 <input type="checkbox" name="color" value="red"/>red <input type="checkbox" name="color" value="green"/>green <input type="checkbox" name="color" value="purple"/>purple <input type="checkbox" name="color" value="gr

我有一些像这样的html剪报

<input type="checkbox" name="color" value="red"/>red
<input type="checkbox" name="color" value="green"/>green
<input type="checkbox" name="color" value="purple"/>purple
<input type="checkbox" name="color" value="grey"/>grey
$.post('/test', {'color': ['red', 'green']});
我确实在stackoverflow中搜索过这个问题,但人们说应该是“color[]”而不是“color”,但每当我使用“color”或“color[]”时,firebug显示的帖子数据是“color%5B%5D=红色和color%5B%5D=绿色”,我的服务器无法正常工作,但使用

<input type="submit" value="submit"/>

发布firebug说数据是“color=red&color=green”,我的服务器工作正常。
怎么可能呢?我的jquery版本是1.4.4,我相信当你调用-

$.post('/test', {'color': ['red', 'green']});
一个数组正在作为post数据传递,数组的展平是导致“color%5B%5D=red&color%5B%5D=green”结果的原因

如果您使用以下-

$('input:checkbox[name="color"][checked=true]').serialize()
这将以“color=red&color=green”格式返回所有选中的复选框。
这里有一个JSFIDLE试图说明这个概念-。

出于某种原因,jQuery开发人员认为PHP对多个同名控件的奇怪处理是正确的方法。因此,在提交数据数组时,jQuery将在名称后面附加
[]
%5B%5D
只是
[]
的URL编码表示形式)

发布firebug说数据是“color=red&color=green”,我的服务器工作正常

这表明您正在使用PHP以外的东西来处理数据,因此PHP在名称中对
[]
的神奇处理不适用

您可以在服务器上查找
color[]

e、 g

…或者,您可以设置模式以停止jQuery对数据进行分页

$.post('/test', {'color': ['red', 'green']}, { traditional: true });
那么正常访问应该可以工作:

@values = $query->param('color');

你试过jQuery.ajax()吗?谢谢你的回答,我从来没有真正理解过为什么jQuery会以这种方式整平数组。现在一切都有意义了!好的,没错,我再次使用php进行测试,它真的很有效!顺便说一句,我正在使用web.py作为我的服务器…也许我现在应该学习一些php,哈哈
@values = $query->param('color');