我正在尝试使用formdata对象将表单数据发送到我的服务器。我需要这个,因为我的一个输入字段是一个文件。但是当我尝试将数据发送到我的服务器时,formdata对象是空白的,它还打印出“{}”。有什么问题?我将jquery更新为11.1,它支持formdata。感谢。
Preferences
服务器:
<form enctype="multipart/form-data" name="formName" id="formId">
<input type="text" name="name" class="form-control" id="name">
</form>
<button type="submit" class="btn btn-xl sub">Send Message</button>
<script>
$(".sub").click(function(){
var formElement = document.querySelector("form");
alert(formElement); //alert message is "[object HTMLFormElement]"
var d = new FormData(formElement);
alert(JSON.stringify(d)); //alert message is "{}"
$.post("/email",d,function(data){
alert("success!");
});
});
</script>
https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects
答案 0 :(得分:0)
如何在节点服务器上解析POST请求的主体?
问题在于FormData
会将内容类型设置为multipart/form-data
,而Express {&#39; body-parser
无法理解。
请注意评论here:
[body-parser]由于其复杂且通常较大的性质而无法处理多部分主体。对于多部分机构,您可能对以下模块感兴趣:busboy和connect-busboy;多方和连接多方;强大; multer。
换句话说,您必须使用不同的模块来处理FormData发送的多部分主体。我可以推荐formidable
,在这种情况下,您的服务器代码类似于:
const formidable = require('formidable')
exports.createPost = (req, res, next) => {
var form = new formidable.IncomingForm();
form.parse(req, (err, fields, files) => {
console.log(fields)
res.send('NOT IMPLEMENTED: pollsController createPost');
}
}