使用jquery序列化复选框 - 每个名称只有一个值

时间:2016-08-10 02:25:11

标签: jquery ajax serialization

我试图通过ajax传递一种复选框。我真正想要的是所选复选框的所有值的列表。

<form id="filters_form">
<input type="checkbox" name="speed" value="1">
<input type="checkbox" name="speed" value="4">
<input type="checkbox" name="accuracy" value="2">
<input type="checkbox" name="measurement-types" value="3">
</form>

这就是我对数据进行重新分类的方法

form_val = $('#filters_form').serialize();
$.ajax({        
    type    : 'POST',
    url     : '//localhost/ajax/filters.php',
    data    : form_val,
    success : function(data) {}
});

当检查多个具有相同名称的复选框时,问题似乎就出现了。 当数据通过ajax发送时,我们有speed+=1&speed+=4&accuracy+=2 但是如果我print_r($_POST)那么我只能得到

Array
(
    [speed] => 4
    [accuracy] => 2
)

每个名称只需要一个实例。我怎样才能获得完整的数据?

1 个答案:

答案 0 :(得分:1)

为什么你会使用相同的名称来选择不同的复选框来保存不同的值?为什么不能为每个复选框使用唯一的名称?

虽然您可以为一组单选按钮共享相同的名称,因为在该组中只能选择一个单选按钮,并且只有选定的单选按钮的值会被发送到服务器文件。

但是如果是复选框,则不能使用相同的名称两次或更多次。因为,在服务器文件中说PHP,只会考虑最后检查的值。之前的值将不再存在。这证实了变量的概念,它告诉我们普通变量一次只能保存一个值。如果在其中存储了新值,则先前的值将被清除。

如果您仍想为不同的复选框使用相同的名称,那么使用数组将是一个理想的解决方案。你可以这样做:

<form id="filters_form">
    <input type="checkbox" name="speed[]" value="1">
    <input type="checkbox" name="speed[]" value="4">
    <input type="checkbox" name="accuracy" value="2">
    <input type="checkbox" name="measurement-types" value="3">
</form>

在服务器端,您将收集数据:

Array
(
    [speed] => Array
        (
            [0] => 1
            [1] => 4
        )

    [accuracy] => 2
    [measurement-types] => 3
)

此后,您可以通过一些循环代码使用此数据。

我认为可以指导您的优秀帖子是How to pass an array within a query string?