我试图通过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
)
每个名称只需要一个实例。我怎样才能获得完整的数据?
答案 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?