javascript - jQuery Form - 序列化为多维数组?

标签 javascript jquery arrays json forms

我需要从 form 中获取值,将其格式化为 JSON 并通过 AJAX 发布。这是我想要实现的格式:

{
  items: [
    { id: 7, name: 'Book', price: 5.7 },
    { id: 5, name: 'Pencil', price: 2.5 }
  ]
}

这是 HTML:

(function($){
  
  var $form = $('form');
  
  // serializeArray format is way off from what I need
  var rawData = $form.serializeArray();
  console.log(rawData)
  
})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
  <fieldset>
    <h2>Product 1</h2>
    <input type="hidden" name="items[0][id]" value="7">
    <input type="text" name="items[0][name]" value="Book">
    <input type="number" name="items[0][price]" value="5.7">
  </fieldset>
  
  <fieldset>
    <h2>Product 2</h2>
    <input type="hidden" name="items[1][id]" value="5">
    <input type="text" name="items[1][name]" value="Pencil">
    <input type="number" name="items[1][price]" value="2.5">
  </fieldset>
</form>

我是否应该循环并使用正则表达式来解析 name ?还是有内置的方式?

我可以更改 <form>需要时格式化。

最佳答案

这里不能使用默认的序列化,而是可以像这样手动序列化

(function($) {

  var $fieldsets = $('form fieldset');

  var items = $fieldsets.map(function(i, fs) {
    var obj = {};
    $(fs).find('input').each(function() {
      obj[this.name.match(/\[([^\[]*)\]$/)[1]] = this.value;
    });
    return obj;
  }).get();

  var rawData = {
    items: items
  };
  console.log(rawData)

})(jQuery);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<form>
  <fieldset>
    <h2>Product 1</h2>
    <input type="hidden" name="items[0][id]" value="7">
    <input type="text" name="items[0][name]" value="Book">
    <input type="number" name="items[0][price]" value="5.7">
  </fieldset>

  <fieldset>
    <h2>Product 2</h2>
    <input type="hidden" name="items[1][id]" value="5">
    <input type="text" name="items[1][name]" value="Pencil">
    <input type="number" name="items[1][price]" value="2.5">
  </fieldset>
</form>

关于javascript - jQuery Form - 序列化为多维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39092532/

相关文章:

javascript - Three.js - 对象 viewAt() 与其行进路径垂直 90 度

javascript - ImageView 使用存储在 Titanium.Filesystem.applicationDataDirectory 的图像显示占位符,而不是图像

javascript - Jquery - 如何隐藏表前的 h2 和表后的文本?

javascript - 获取删除的 div 的 ID 并隐藏所有其他没有此类的 div

javascript - React setState 不覆盖对象

javascript - Windows Live 弹出窗口

javascript - 使用 Localstorage 欢迎回访用户

javascript - 如果长度小于某个数字,如何从 React 中的数组中过滤项目?

java - java中的数组保存在内存中的什么位置?

javascript - 计算奇偶数函数问题