尽管我付出了最大的努力,但我仍然坚持为提交给NodeJS,Express和把手的表单元素获取数组键。
我的表单元素如下所示:
{{#each block}}
<input type='text' name='block_payout[{{id}}]' />
{{/each}
这会在浏览器中产生以下标记:
<input type='text' name='block_payout[14]' />
<input type='text' name='block_payout[15]' />
<input type='text' name='block_payout[16]' />
在PHP中,这将导致数组作为$ _POST数组的元素:
$_POST [
block_payout [
14 => value1
15 => value2
16 => value3
]
]
但是,Node / Express中的req.body属性会删除这些键并创建索引数组:
req.body [
block_payout [
0 => value1
1 => value2
2 => value3
]
]
由于我想使用密钥将提交的值绑定到其他位置,这对我来说是个大问题。有谁知道如何使用正确的密钥获取提交的表单数据?
答案 0 :(得分:3)
似乎主体解析器在仅看到数字键时使用数组(必须从索引0开始),而在至少有一个非数字键时使用对象。考虑到这一点,您可以尝试以下方法之一:
使用隐藏表单输入强制在数组上使用对象。例如:
<input type='hidden' name='block_payout[null]' />
<input type='text' name='block_payout[14]' />
...
以下机构的结果:
{ block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } }
使用非数字字符对密钥进行前缀以强制对象映射。例如:
<input type='text' name='block_payout[i14]' />
...
以下机构的结果:
{ block_payout: { i14: 'test1', i15: 'test2', i16: 'test3' } }