我有以下表格,其中有许多相似类型的输入字段具有相同的名称(例如,10个字段用于“名称”,10个字段用于“地址”)。这些输入字段重复多少次,不能在之前说过,因此不能给出静态的不同名称(例如'name1','name2','address1','address2')。
问题:当我使用ajax post(序列化)发布数据时,它只发布具有相同名称的字段的第一个值(通过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>
答案 0 :(得分:3)
我认为您可以使用$.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
}
答案 1 :(得分:3)
<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
)
)
答案 2 :(得分:0)
您必须序列化数据并通过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;
}