将serialize()转换为对象数组,以发布到控制器

时间:2019-05-29 14:57:52

标签: javascript json asp.net-mvc serialization datatables

我正在使用数据表。我有一个带有多个输入的表,我想通过ajax将对象数组发布到控制器。

var data = table.$('input, select').serialize();

结果:

row-1-location=123&row-1-lot=231545&row-2-location=2323&row-2-lot=5523&row-3-location=23232&row-3-lot=23235

我假设我需要在每秒的'&'处分割字符串,然后再次分割。 问题是,这是将其转换为对象数组的唯一方法吗?

我想要的结果是对象数组:

[{location : 123, lot: 231545}, {location: 2323, lot: 5523}......]

HTML:

<tbody>
    <tr role="row" class="odd">
        <td><input type="text" id="row-5-location" name="row-5-location" value=""></td>
        <td><input type="text" id="row-5-lot" name="row-5-lot" value=""></td>
    </tr>
    <tr role="row" class="even">
        <td><input type="text" id="row-6-location" name="row-5-location" value=""></td>
        <td><input type="text" id="row-6-lot" name="row-5-lot" value=""></td>
    </tr>
</tbody>

谢谢!

1 个答案:

答案 0 :(得分:1)

要创建您需要的对象数组,直接从DOM构建结构而不是序列化它,然后将结果字符串分开就更有意义了。

要实现此目的,您可以选择父tr元素,然后使用map()来构建对象。唯一使HTML变得更简单的更改就是将公共类放在input元素上。像这样:

var arr = $('table tr').map(function() {
  var $tr = $(this);
  return {
    location: $tr.find('.location').val(),
    lot: $tr.find('.lot').val()
  }
}).get();

console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table>
  <tbody>
    <tr role="row" class="odd">
      <td><input type="text" class="location" id="row-5-location" name="row-5-location" value="123"></td>
      <td><input type="text" class="lot" id="row-5-lot" name="row-5-lot" value="231545"></td>
    </tr>
    <tr role="row" class="even">
      <td><input type="text" class="location" id="row-6-location" name="row-5-location" value="2323"></td>
      <td><input type="text" class="lot" id="row-6-lot" name="row-5-lot" value="5523"></td>
    </tr>
  </tbody>
</table>