【问题标题】:serializeArray have unwanted extra array wrapserializeArray 有不需要的额外数组换行
【发布时间】:2017-09-07 14:24:50
【问题描述】:

我使用 serializeArray() 来获取表单输入元素值,但是当我这样做时有一个额外的数组包装,如何避免这种情况

<form method="post" class="form" action="<?=site_url('update_description');?>" role="form" data-toggle="validator">
  <input type="hidden" name="id" value="<?=$info['id'];?>">
  <textarea placeholder="Enter Property Description" class="form-control" name="description" rows="4" required><?= $info['description'];?></textarea>
  <button type="submit" class="btn btn-sm">Update Description</button>   
<script>        
</form>
$('.form').submit(function(e) {
    e.preventDefault();
    var params = $(this).serializeArray();
    $.post($(this).attr('action'), 
    {params},
    function(data){
        //console.log(data);
    });
});
</script>

我在控制器中得到这样的数据

Array
(
[params] => Array
    (
        [0] => Array
            (
                [name] => id
                [value] => 44
            )

        [1] => Array
            (
                [name] => description
                [value] => hello
            )

    )

 )

【问题讨论】:

  • 你能展示一下结果的样子吗?
  • 看,我正在使用 ci 验证,它应该与我们使用普通 post 时的方式相同,php。

标签: php jquery serialization


【解决方案1】:

您可以使用reduce() 将您的输出转换为一个后参数,该参数形状为名称/值对的对象:

var params = $(this).serializeArray().reduce(function(acc, ele) {
      acc[ele.name] = ele.value;
      return acc;
}, {});

另外,你需要从:

{params},

到:

params,

$('.form').submit(function(e) {
  e.preventDefault();
  var params = $(this).serializeArray().reduce(function(acc, ele) {
      acc[ele.name] = ele.value;
      return acc;
  }, {});
  console.log(params);
  
  
  return;
  // useless for test
  $.post($(this).attr('action'),
          params,
          function(data){
              //console.log(data);
          });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<form method="post" class="form" action="<?=site_url('update_description');?>" role="form" data-toggle="validator">
    <input type="hidden" name="id" value="<?=$info['id'];?>">
    <textarea placeholder="Enter Property Description" class="form-control" name="description" rows="4" required><?= $info['description'];?></textarea>
    <button type="submit" class="btn btn-sm">Update Description</button>
</form>

【讨论】:

  • 所以你是说 seializearray() 与普通的 post 数组不同?
  • @RanjithM 是的,当您需要以对象对名称/值的形式将参数传递给帖子时,您需要将数组转换(减少)为正确的类型。查看我的 sn-p 的输出。
  • @RanjithM 怀疑,有问题吗?如果我能帮助你,请告诉我
  • 感谢兄弟将 {params} 更改为 params,这有效!不需要reduce函数@gaetanoM
【解决方案2】:

只需使用 serialize() 代替。

$('form').serialize();

http://api.jquery.com/serialize/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 2016-11-18
    • 2014-12-13
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多