我有像这样的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
我想使用jquery将值发布到服务器,所以我使用了像这样的jquery
$.post('/test', {'color': ['red', 'green']});
我确实在stackoverflow中搜索了这个问题,但人们说它应该是'color []'而不是'color',但每当我使用'color'或'color []'firebug显示帖子数据是'color% 5B%5D =红色&amp; color%5B%5D =绿色',我的服务器无法正常工作,但使用时
<input type="submit" value="submit"/>
发布firebug说数据是'color = red&amp; color = green',我的服务器工作正常。 怎么会这样?我的jquery版本是1.4.4
答案 0 :(得分:2)
我相信你打电话的时候 -
$.post('/test', {'color': ['red', 'green']});
一个数组作为后期数据被传递,并且数组的扁平化导致'color%5B%5D = red&amp; color%5B%5D = green'结果。
如果您使用以下内容 -
$('input:checkbox[name="color"][checked=true]').serialize()
这应该以'color = red&amp; color = green'格式返回所有选中的复选框。 有一个jsfiddle试图在这里说明这个概念 - http://jsfiddle.net/789nP/。
答案 1 :(得分:1)
出于某种原因,jQuery开发人员认为PHP对同名的多个控件的奇怪处理是The Correct Way。因此,在提交数据数组时,jQuery会将[]
附加到名称(%5B%5D
只是[]
的URL编码表示。)
发布firebug说数据是'color = red&amp; color = green',我的服务器工作正常
这表明您使用的不是PHP来处理数据,因此PHP对名称中[]
的神奇处理不适用。
您可以在服务器上查找color[]
...
e.g。
@values = $query->param('color[]');
...或者您可以设置traditional模式以停止jQuery PHP化您的数据。
$.post('/test', {'color': ['red', 'green']}, { traditional: true });
然后正常访问应该有效:
@values = $query->param('color');