将表单数据序列化为数组表示法

时间:2016-07-10 03:34:26

标签: javascript jquery forms http serialization

我有这个表格

<form action="" method="post">
  <input type="hidden" name="one" value="somevalue">
  <input type="hidden" name="two" value="anothervalue">
  <input type="hidden" name="three" value="someothervalue">
</form>

我也可以使用jQuery。

如何序列化表单数据以使$.post()$.ajax()方法以这种方式在HTTP请求中发送数据:

mydata[one]: somevalue
mydata[two]: anothervalue
mydata[three]: someothervalue

而不是:

one: somevalue
two: anothervalue
three: someothervalue

2 个答案:

答案 0 :(得分:1)

两个建议:

1)直接设置名称:

<input type="hidden" name="mydata[one]" value="somevalue">

2)加载后更改表单的名称(如果你想要一些动态行为)。这样的事情(未经测试):

$(document).ready(function() {
    var prefix = 'data'; //or get from some data- attribute
    $('form input').each(function() {
        $(this).attr('name', prefix + '[' + $(this).attr('name') + ']' );
    });
});

然后,如果您想通过AJAX + jQuery发送数据,一种方法是使用serialize()序列化表单数据。

答案 1 :(得分:0)

您无法通过$.ajax()发送数组,但可以发送JSON字符串。所以,这样的事情会起作用:

var frm = $(document.myform);
var data = JSON.stringify(frm.serializeArray());

示例:

$.ajax({
    type: "POST",
     url: targetURL,
    data: JSON.stringify($('#form').serializeArray())
})
.done(function(data){
      console.log(data);
      return true;
})
.complete(function() {})
.error(function(xhr, textStatus, errorThrown) {
     console.log('ajax loading error...');
     return false;
    }
});

在PHP方面,使用json_decode将JSON转换回数组:

// decode JSON string to PHP object, 2nd param sets to associative array
$decoded = json_decode($_REQUEST['data'],true);

output values:
foreach ($decoded as $value) {
   echo $value["name"] . "=" . $value["value"];
}

参考文献:

https://www.sitepoint.com/jquery-php-ajax-json/

https://stackoverflow.com/a/11338832/1447509

https://jsfiddle.net/gabrieleromanato/bynaK/