我有一个关于PHP/jQuery中表单序列化的问题。下面是我的代码:
<form name="myForm" method="post" action="page.php">
<table>
<tr>
<td>Field 1</td><td>Field 2</td><td>Field 3</td>
</tr>
<?php
$i = 0;
while ($tempInfo=mysql_fetch_array(query)) {
$field1 = $tempInfo['field1'];
$field2 = $tempInfo['field2'];
$field3 = $tempInfo['field3'];
?>
<tr>
<td><input type="hidden value="<?php echo $field1?>"> name=testValue</td><td><?php echo $field2 ?></td><td><?php echo $field3?></td><td><input type="checkbox" name="myCheckboxes[]" id="myCheckboxes" value="getReport_<?php echo $i;?>" /></td></tr>
<?php
}
?>
</table>
<input id="submit" type="submit" name="submit" value="Submit" onclick="submitForm()" /></form><div id="myResponse"></div>
然后是jQuery代码:
<script type="text/javascript">
function submitForm() {
var form = document.myform;
var dataString = $(form).serialize();
$.ajax({
type:'POST',
url:'report-gen.php',
data: dataString,
success: function(data){
$('#myResponse').html(data);
}
});
return false;
}
</script>
问题是,正在发送数据,但只发送最后一行的数据,而不是基于复选框。如何确保发送的唯一数据是选中复选框的数据?
如果您有多个具有相同名称的字段,如果名称没有以[]
结尾(而testValue
没有),PHP将丢弃除最后一个字段之外的所有字段。重命名输入。
您可以将所有数据放在复选框中,并在返回时对其进行解析,而不是使用隐藏字段。例如,将值更改为:
value="getReport_<?php echo $i;?>|$field1"
要获得不同的值,请执行
list($report, $field1) = explode("|", $checkbox_value);