【发布时间】:2019-01-22 04:56:52
【问题描述】:
我正在通过 jQuery 中的serializeArray() 从表单创建一个数组:
var form = $(this).closest('form');
var formData = form.serializeArray();
如果我用alert(formData.toSource()); 输出它,我会得到结果:
[{name:"form[username]", value:"1"}, {name:"form[email]", value:"1@12.sw"}, {name:"form[is_active]", value:"1"}, {name:"form[plainPassword][first]", value:""}, {name:"form[plainPassword][second]", value:""}, {name:"form[id]", value:"9"}, {name:"form[_token]", value:"Mk"}]
如果我使用 $data = $request->request->get('data');通过 Ajax 将数据捕获到 php 中,结果会得到以下数组:
array(7) {
[0]=>
array(2) {
["name"]=>
string(14) "form[username]"
["value"]=>
string(1) "1"
}
[1]=>
array(2) {
["name"]=>
string(11) "form[email]"
["value"]=>
string(7) "1@12.sw"
}
[2]=>
array(2) {
["name"]=>
string(15) "form[is_active]"
["value"]=>
string(1) "1"
}
[3]=>
array(2) {
["name"]=>
string(26) "form[plainPassword][first]"
["value"]=>
string(0) ""
}
[4]=>
array(2) {
["name"]=>
string(27) "form[plainPassword][second]"
["value"]=>
string(0) ""
}
[5]=>
array(2) {
["name"]=>
string(8) "form[id]"
["value"]=>
string(1) "9"
}
[6]=>
array(2) {
["name"]=>
string(12) "form[_token]"
["value"]=>
string(43) "Mk"
}
}
我实际需要的数组是这样的:
array(2) {
["form[username]"]=>
string(14) "1"
["form[email]"]=>
string(1) "1@12.sw"
["form[is_active]"]=>
string(1) "1"
["form[plainPassword][first]"]=>
string(0) ""
["form[plainPassword][second]"]=>
string(0) ""
["form[id]"]=>
string(1) "9"
["form[id]"]=>
string(2) "Mk"
}
那么实际上有可能以不同的方式序列化 Array 吗?实现我需要的数组的最佳方法是什么?
【问题讨论】:
-
您需要通过手动循环表单元素来创建该对象结构。没有内置的 jQuery 方法可以为你做这件事
-
对,你必须在你的js中手动构建你想要的数组
-
或者您可以手动解析数据,而不是使用
$request->request->get()。我猜这会发送 JSON 吗?或者正如@LawrenceCherone 建议的那样,使用array_column:array_combine(array_column($data, 'name'), array_column($data, 'value')); -
@AymDev 这解决了我的问题!
-
@AymDev 你想发表你的建议作为答案吗?
标签: php jquery arrays ajax serializearray