我想通过jQuery / ajax将一个动态增长的表单作为JSON发送(POST)到NodeJs。 Node中的完美结果是像
这样的数据结构{
servers: [
1: {
name: someServer,
host: someserver.tld,
port: 80
},
2: {
name: someOtherServer,
host: someotherserver.tld,
port: 8080
}
]
}
我现在尝试的是一个看似
的表格<input name="servers[1][name]">
<input name="servers[1][host]">
<input name="servers[1][port]">
<input name="servers[2][name]">
<input name="servers[2][host]">
<input name="servers[2][port]">
然后使用JSON.stringify(form.serializeArray()
然而这不起作用 - 因为Node中的主体看起来像:
body: [
{ name: 'server[0][name]', value: 'ucbuild02' },
{ name: 'server[0][host]', value: 'ucbuild02.udac.se' },
{ name: 'server[0][port]', value: '2376' },
{ name: 'server[1][name]', value: 'ucaccapp01' },
{ name: 'server[1][host]', value: 'ucaccapp01.udac.se' },
{ name: 'server[1][port]', value: '2376' },
{ name: 'server[2][name]', value: 'ucaccapp03' }
],
这是一个问题,我如何格式化我的表单,如何序列化它,或者我如何在Node中解析它?数据以JSON格式发送 - 请求标头验证为application/json
感谢您的帮助!
答案 0 :(得分:1)
我知道没有内置函数可以直接执行您想要的操作,但可能的解决方案是在表单名称中使用分隔符,而不是数组表示法,如下所示:
<input name="servers-1-name">
<input name="servers-1-host">
<input name="servers-1-port">
<input name="servers-2-name">
<input name="servers-2-host">
<input name="servers-2-port">
然后遍历表单数组,拆分名称并形成js对象。
var formData = form.serializeArray();
var output = { servers: [] };
for (var x = 0, len = formData.length; x < len; x++) {
var namePieces = formData[x].name.split('-');
var number = parseInt(namePieces[1]);
var name = namePieces[2];
if (!output.servers[number])
output.servers[number] = {};
output.servers[number][name] = formData[x].value;
}
return output;