使用javascript将表单中的动态列表对象转换为JSON

时间:2017-11-21 12:04:35

标签: javascript json ajax forms

我有一个表单提交脚本,它将表单输入转换为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的情况下编写它。

2 个答案:

答案 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;
}, {});