繁体   English   中英

通过AJAX将多组复选框发送到PHP

[英]Sending multiple groups of checkboxes to PHP via AJAX

我检查了各种SO问题

  1. 如何在jQuery中通过ajax发送复选框组?
  2. 序列化jQuery中的复选框

但是这些都不会发送一组以上的复选框。

我有一个带有一系列复选框的表单:

<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);

它的作用是:

  1. 如果是这种情况,它将检查name是否以[]结尾,如果不是,则将其忽略。
  2. 它将在$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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM