Javascript 对于html表单post请求,formdata对象为空

Javascript 对于html表单post请求,formdata对象为空,javascript,ajax,node.js,express,form-data,Javascript,Ajax,Node.js,Express,Form Data,我正在尝试使用formdata对象将表单数据发送到我的服务器。我需要这个,因为我的一个输入字段是一个文件。但是,当我尝试将数据发送到服务器时,formdata对象是空的,它还打印出“{}”。问题是什么?我已经将jquery更新到11.1,它支持formdata。谢谢 <form enctype="multipart/form-data" name="formName" id="formId"> <input type="text" name="name" class

我正在尝试使用formdata对象将表单数据发送到我的服务器。我需要这个,因为我的一个输入字段是一个文件。但是,当我尝试将数据发送到服务器时,formdata对象是空的,它还打印出“{}”。问题是什么?我已经将jquery更新到11.1,它支持formdata。谢谢

  <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>

如何解析节点服务器上的POST请求主体

问题是
FormData
会将内容类型设置为
multipart/FormData
,表示“
主体解析器不理解”

请注意以下评论:

[body parser]不处理多部分实体,因为它们复杂且通常较大。对于多部分实体,您可能对以下模块感兴趣:总线男孩和连接总线男孩;多党和多党联手;可怕的;穆特

换句话说,您必须使用不同的模块来处理FormData发送的多部分正文。我可以推荐
强大的
,在这种情况下,您的服务器代码如下所示:

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');
    }
}

它是一个空对象,这就是它作为字符串的样子。旁白:对于JSON.stringify()来说,它看起来是一样的,即使填充了…我想知道为什么它是一个空对象。我无法将填充的表单与我的post请求一起发送。它在客户机上是空的,并且永远不会到达服务器。我的请求有什么问题吗?好的,那么什么是
$。post
?一个应该向我的服务器发送表单数据的post请求。在我尝试实现FormData对象之前,我能够成功地用我的代码与客户机/服务器通信。。。所以我想这可能是原因,但我不知道为什么
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');
    }
}