我有下面的表单,它有很多具有相同名称的类似类型的输入字段(例如,10个字段表示"name",10个域表示"address"(。这些输入字段将重复多少次,无法在前面说明,因此不能为它们指定静态的不同名称(例如"名称1"、"名称2"、"地址1"、"地址2"(。
问题:当我使用ajax post(序列化(发布数据时,它只发布具有相同名称的字段的第一个值(用php接收(。
必需:
- 如何正确张贴所有输入数据
- 对于name这样的包含类似数据的输入字段,用php捕获这些数据的最佳方法是什么(表单是在php中生成的(
样本代码:
<form name="content">
<table>
<tr>
<td>
<input name="full_name" type="text" />
</td>
<td>
<input name="address" type="text" />
</td>
</tr>
<tr>
<td>
<input name="full_name" type="text" />
</td>
<td>
<input name="address" type="text" />
</td>
</tr>
</table>
</form>
我认为在您的情况下,您可以使用$.serializeArray()
:
var data = $('form[name="content"]').serializeArray();
这将产生这样的东西:
data = [
{
name : "full_name",
value : "thefieldvalue"
},
{
name : "address",
value : "theaddressvalue"
},
.....
];
请参阅:
data:$('form[name="content"]').serializeArray()+'&request=insert_invoice'
不是发送数据的正确方式,相反,你可以尝试以下方法:
data:{
frmvalues : $('form[name="content"]').serializeArray(),
request:insert_invoice
}
<input name="full_name[]" type="text" value="foo" />
<input name="full_name[]" type="text" value="bar" />
在PHP中,它将是:
Array (
full_name => Array (
0 => foo
1 => bar
)
)
您必须序列化数据并通过ajax发送数据。在php上side取消对数据的序列化并通过此函数对其进行格式化,以获得输出描述了我上面的评论。没有它就不会返回所需的输出。
public function serializedFormDatajQuery2Array($serializedArr){
$aFormData = array();
foreach($serializedArr as $aRow){
if(isset($aFormData[$aRow['name']]) && !is_array($aFormData[$aRow['name']])){
$sValue = $aFormData[$aRow['name']];
$aFormData[$aRow['name']] = array();
$aFormData[$aRow['name']][] = $sValue;
$aFormData[$aRow['name']][] = $aRow['value'];
continue;
}
if(is_array($aFormData[$aRow['name']])){
$aFormData[$aRow['name']][] = $sValue;
continue;
}
$aFormData[$aRow['name']] = $aRow['value'];
}
return $aFormData;
}