通过AJAX向PHP发送多组复选框

时间:2015-06-16 12:27:11

标签: javascript php jquery ajax

我检查了各种SO问题

  1. How to send a checkbox group via ajax in jquery?
  2. serializing checkboxes in jQuery
  3. 但这些都不会发送多套复选框。

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

    <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中将颜色变成数组而另一个数组用于lenths。

    类似的东西:

    $_POST['filter']['color'];
    

3 个答案:

答案 0 :(得分:0)

您希望结果在发送到php时已经是一个检查值数组吗? 如果是,那么您需要预处理它:

var result = [];
$('input[type="checkbox"][name="color[]"]').each(function(_, ele) {
    if ($(ele).prop('checked')) {
       result.push($(ele).attr('value'));
      }
});

希望你想要的东西。

答案 1 :(得分:0)

这里有一些PHP代码可以将$_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中生成一个新数组,其中包含每个复选框组的数组
  3. 因此$filter您的示例$_POST将如下所示:

    Array ( 
      ['color'] => Array ( 
        [0] => 4 
        [1] => 6 
      ) 
      ['length'] => Array ( 
        [0] => 3 
        [1] => 5 
      ) 
    )
    

答案 2 :(得分:-2)

<?php
$colors = $_POST['filter']['color'];

print_r($colors);
?>