【发布时间】:2017-08-24 10:35:15
【问题描述】:
我有一个非常复杂的 html 表单,它由 10 多个普通输入字段和一个创建一系列事物的动态行条目组成。想象一下,有一个包含个人详细信息的表单,用户还可以添加包含家庭成员详细信息的额外行。
我需要能够将两个“块”数据发送到 php。一个简单的$('#myForm').serialize(); 不会这样做,因为第二个块必须作为一个数组发送。
我面临的问题是……
当我以这种方式发送表单值时:
var frm_data = $('#myForm').serialize();
$.ajax({
"url": "request.php?action=save",
"data": frm_data,
"type": "POST",
"success": function(data) {
var response = JSON.parse(data);
if(response.data == "error"){
//
}else{
//
}
}
});
我从表单中获取每个输入字段作为关联的 php 数组。因为动态行的第二个块没有唯一的 name= 值...(唯一的区别是它们的<tr id=>),我只得到最后一行的数据。
Array
(
[name] => George Blah
[address] => Str. 25
[zip] => 35510
...
[extra_name] => Maria
[extra_Tele] => 21214454
[extra_Mobil] => 111111
[extra_Email] =>
)
但在我发送表单之前,我设法创建了一个包含所有“额外”行的 js 数组,并将其存储在一个变量中,我可以使用该变量。 问题是,当我将 BOTH(表单数据和第二个块数组)发送到 php 文件时,表单的数据不再是关联数组。
var extra = [];
//After a pretty complex function,
//i have all the extra dynamic rows stored in this array
var frm_data = $('#myForm').serialize();
$.ajax({
"url": "request.php?action=save",
"data": {"form": frm_data, "extras": JSON.stringify(extra)} ,
"type": "POST",
"success": function(data) {
var response = JSON.parse(data);
if(response.data == "error"){
//
}else{
//
}
}
});
结果是这样的:
Array
(
[form] => name=George+Blah&address=Str+25&zip=35510&=email=&extra_name=Maria&extra_Tele=21214454&extra_Mobil=111111&extra_Email=
[extras] => [{"extra_name":"Maria","extra_Tele":"21214454","extra_Mobil":"111111","extra_Email":""}]
)
在到达 php 文件之前,我需要让“form”值看起来像“extras”值。我不想破坏基于“&”符号发送到 php 的字符串,以防用户添加类似:“George & Marry”的名称,然后所有的地狱都失败了。
所以基本上我想要这个:
[form] => name=George+Blah&address=Str+25&zip=35510&=email=&extra_name=Maria&extra_Tele=21214454&extra_Mobil=111111&extra_Email=
变成这样:
[form] => [{"name":"George Blah","address":"Str 25","zip":"35510","email":"".....}]
我希望我被理解。 :/
谢谢
【问题讨论】: