我正在尝试使用常规表单提交一个对象数组,而不使用AJAX,并且发现不是将请求主体解析为对象数组,而是只有许多字段对应于对象的名称。 / p>
我知道在提交基元数组时,您只需填充许多具有相同名称的输入,它就会填充;但是,我似乎无法将其应用于复杂的物体。
我的表单代码非常简单:
<div class="col-sm-9">
<div class="row">
<div class="col-md-6">
<div class="form">
<div class="form-group">
<label for="attachment[0].name" class="control-label">Name</label>
<input name="attachment[0].name" class="form-control" value="First Name" type="text">
</div>
<div class="form-group">
<label for="attachment[0].uri" class="control-label">URI</label>
<input name="attachment[0].uri" class="form-control" value="First URI" type="text">
</div>
<div class="form-group">
<label for="attachment[0].description" class="control-label">Description</label>
<textarea rows="4" value="First Description" name="attachment[0].description" class="form-control">First Description</textarea>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form">
<div class="form-group">
<label for="attachment[1].name" class="control-label" >Name</label>
<input name="attachment[1].name" class="form-control" value="Second Name" type="text">
</div>
<div class="form-group">
<label for="attachment[1].uri" class="control-label">URI</label>
<input name="attachment[1].uri" class="form-control" value="Second URI" type="text">
</div>
<div class="form-group">
<label for="attachment[1].description" class="control-label">Description</label>
<textarea rows="4" name="attachment[1].description" class="form-control">Second Description</textarea>
</div>
</div>
</div>
</div>
我制作了一个示例存储库来演示我的问题; https://github.com/xueye/express-form-issue您只需运行node server.js
,导航至http://localhost:3000
并提交条目;请求正文将显示在您的控制台中,它应显示为:
{ name: '',
type: '',
'attachment[0].name': 'First Name',
'attachment[0].uri': 'First URI',
'attachment[0].description': 'First Description',
'attachment[1].name': 'Second Name',
'attachment[1].uri': 'Second URI',
'attachment[1].description': 'Second Description' }
是否可以按照我尝试的方式发布数据?
答案 0 :(得分:4)
当您使用常规表单或使用JavaScript发出POST请求时,您将格式化文本发送到服务器。
您无法发送数组,但可以发送数组的文本表示。
the data formats supported by forms没有一个标准方法来表示数据数组。
模式(由PHP引入)使用方括号来描述类似数组的结构。
这与您使用的类似,除了您有时使用JavaScript样式的点符号。切换到纯粹使用方括号。
name="attachment[1][uri]"
...但您需要在服务器上解码该数据格式。
要在Express 4中使用:
var bodyParser = require("body-parser");
var phpStyleParser = bodyParser.urlencoded({ extended: true })
和
app.post('/example', phpStyleParser, function(req, res) {
console.log(req.body);
res.json(req.body);
});