首页 > 解决方案 > 对象序列化,如表单数据序列化

问题描述

我不确定我是否遗漏了某些东西,或者它不像我认为的那样工作。我有一些要拆分的表单数据。为此,我想我可以使用我想要的值创建另一个对象:

let data = $('form').serializeArray();
let answers = {};
data.forEach(function(element) {
    // check if the element contains a answer input value
    if(element.name.indexOf('answer') !== -1) {
        answers[element.name] = element.value;
    }
});

console.log($('form').serialize()); 
// output:  answer%5B1%5D=1&answer%5B2%5D=2&answer%5B4%5D=3&answer%5B3%5D=4&sort=relevance&query=&area=..... etc
console.log(answers.serialize());   
// output: is not a function.

再说一遍。我认为您可以像处理表单数据一样将对象序列化为字符串以进行数据存储。

有人可以向我解释我做错了什么和/或为什么序列化不起作用?

标签: javascriptjquery

解决方案


answers不是 jQuery 对象,所以它没有serialize()方法。如果您想像使用 jQuery 的序列化一样获得名称-值对字符串,那么您可以使用jQuery 的 param方法

answers = {
  "answer1":1,
  "answer2":2
};
console.log(jQuery.param(answers));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

否则,如果您只是想序列化为answersJSON,以便以后可以重新创建它,那么您只需使用JSON.stringify

    answers = {
      "answer1":1,
      "answer2":2
    };
    console.log(JSON.stringify(answers));


推荐阅读