我有一个表单提交脚本,它将表单输入转换为JSON并使用ajax提交。它适用于我之前使用它的简单表单,但是当我尝试将它用于列表时,它无法正确读取。
在表单内部有一个由另一个脚本生成的动态输入列表。列表项看起来像这样:
<li><input type="checkbox" name="skill_list[]" value="10155"></li>
读取表单的函数如下所示:
var formToJSON = elements => [].reduce.call(elements, (data, element) => {
data[element.name] = element.value;
return data;
}, {});
在提交按钮的事件监听器内,该函数被调用:
var data = formToJSON(this.elements);
最后,在提交之前,数据是字符串化的:
var data = JSON.stringify(data);
formToJSON函数中发生错误。它不是创建名为skill_list的对象和像{10155,10288,10240}这样的值,而是创建一个名为skill_list []的对象,该值是列表中第一个值的值。
我一直在尝试重写该功能以识别列表,但我无法完成并且我的想法已经用完了。有人可以帮我指导正确的方向吗?
PS。我更愿意在没有jQuery的情况下编写它。
答案 0 :(得分:0)
如果要将表单数据转换为json对象,请尝试以下
select t.demo_var,t.com_name,max(t.updated_date)
from
(
select demo_var,com_name,upddated_date
from DemoTable
where demo_var=100
and (com_name,updated_date) not in (select com_name,max(updated_date)
from DemoTable
where demo_var=100
group by demo_var,com_name
)
)t
group by t.demo_var,t.com_name;
答案 1 :(得分:0)
你必须分别处理元素数组:
var formToJSON = elements => [].reduce.call(elements, (data, element) => {
var isArray = element.name.endsWith('[]');
var name = element.name.replace('[]', '');
data[name] = isArray ? (data[name] || []).concat(element.value) : element.value;
return data;
}, {});