[英]Sending multiple groups of checkboxes to PHP via AJAX
我检查了各种SO问题
但是这些都不会发送一组以上的复选框。
我有一个带有一系列复选框的表单:
<input type="checkbox" name="color[]" value="1"/>
<input type="checkbox" name="color[]" value="2"/>
...
<input type="checkbox" name="size[]" value="1"/>
<input type="checkbox" name="size[]" value="2"/>
...
表单上还有一些其他非复选框。
我通过ajax将其发送到php:
$.ajax({
url: '/filter',
type: 'POST',
data: { filter: $(self.form).serializeArray()},
dataType: 'JSON'
});
然后,我需要获取PHP中每组复选框的值。 所以我输出帖子:
array (size=4)
0 =>
array (size=2)
'name' => string 'color[]' (length=7)
'value' => string '4' (length=1)
1 =>
array (size=2)
'name' => string 'color[]' (length=7)
'value' => string '6' (length=1)
2 =>
array (size=2)
'name' => string 'length[]' (length=8)
'value' => string '3' (length=1)
3 =>
array (size=2)
'name' => string 'length[]' (length=8)
'value' => string '5' (length=1)
但是如何获得每组值? 我想要具有所有颜色的var和具有所有尺寸的var。
只是为了澄清-我正在寻找一种在PHP中将颜色分成一个数组和另一个数组的方法。
就像是:
$_POST['filter']['color'];
当发送到php时,您是否希望结果已经是一组检查值? 如果是,那么您需要对其进行预处理:
var result = [];
$('input[type="checkbox"][name="color[]"]').each(function(_, ele) {
if ($(ele).prop('checked')) {
result.push($(ele).attr('value'));
}
});
希望它是你想要的。
这是一些PHP代码,它将$_POST
转换$_POST
名为$filter
的新数组
$filter = array();
foreach ($_POST as $checkbox) {
if (substr($checkbox['name'],-2) == '[]') {
$name = substr($checkbox['name'],0,-2);
if (!array_key_exists($name,$filter)){
$filter[$name] = array();
}
array_push($filter[$name],$checkbox['value']);
}
}
print_r($filter);
它的作用是:
name
是否以[]
结尾,如果不是,则将其忽略。 $filter
中生成一个新数组,其中包含每个复选框组的数组 因此,示例$_POST
$filter
如下所示:
Array (
['color'] => Array (
[0] => 4
[1] => 6
)
['length'] => Array (
[0] => 3
[1] => 5
)
)
<?php
$colors = $_POST['filter']['color'];
print_r($colors);
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.