2014-03-05 17 views
4

尽管我尽了最大的努力,但我一直在获取提交给NodeJS和Express以及handlebars的表单元素的数组键。节点中的表单元素数组键和表达式

我的表单元素看起来是这样的:

{{#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的元素array:

$_POST [ 
    block_payout [ 
    14 => value1 
    15 => value2 
    16 => value3 
    ] 
] 

但是,Node/Express中的req.body属性删除了这些键和cre阿泰索引数组:

req.body [ 
    block_payout [ 
    0 => value1 
    1 => value2 
    2 => value3 
    ] 
] 

因为我想使用的关键扳平提交值到别的东西,这是我的一个大问题。有谁知道我可以通过正确的密钥获取提交的表单数据?

回答

3

它看起来像身体解析器使用数组(它必须从索引0开始),当它只能看到数字键时,以及至少有一个非数字键的对象。考虑到这一点,您可以尝试以下方法之一:

  1. 使用隐藏表单输入强制在数组上使用对象。例如:

    <input type='hidden' name='block_payout[null]' /> 
    <input type='text' name='block_payout[14]' /> 
    ... 
    

    结果在下面的机构:

    { block_payout: { '14': 'test1', '15': 'test2', '16': 'test3', null: '' } } 
    
  2. 前缀您有非数字字符以迫使对象映射键。例如:

    <input type='text' name='block_payout[i14]' /> 
    ... 
    

    结果了以下机身:

    { block_payout: { i14: 'test1', i15: 'test2', i16: 'test3' } } 
    
+0

谢谢!这是一种耻辱,它必须是这样的,我不知道它是否可以被视为一个错误。 – lewis

相关问题