我有这个表格
<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
答案 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/