【问题标题】:JQuery Ajax Form Submit with Form Data returns nothing on submit带有表单数据的 JQuery Ajax 表单提交在提交时不返回任何内容
【发布时间】:2022-01-22 12:17:43
【问题描述】:

以下示例不返回任何内容。如果我遗漏了什么,您能否澄清一下?

Javascript:

$('#add-modal').submit(function(e) {        
  e.preventDefault();
  var formData = new FormData( document.getElementById("add-modal"));
  $.ajax({
    type: "POST",
    url: "/add-form",
    data: formData,
    processData: false,
    contentType: false,
    success: function (data) { console.log("SUCCESS : ", data); },
    error: function (e) {console.log("ERROR : ", e); }
  });
});

HTML(提交表格):

<form id="add-modal" method="POST" enctype="multipart/form-data">
    <div class="modal-body">                    
        <div class="form-group">
            <label>Name</label>
            <input type="text" class="form-control"  name="name" required>
        </div>
        <div class="form-group">
        <label>Classes</label>
         <select class="form-control" name="classes">
         <option value="Direct">Direct</option>
         <option value="Merketing">Merketing</option>
         <option value="Partnets">Partnets</option>
         </select>
        </div>  
        <div class="form-group">
        <label>File</label>
         <input type="file"  class="form-control" name="file">
        </div>                  
    </div>
    <div class="modal-footer">
        <input type="submit" class="btn btn-success" value="Add">
    </div>
</form>

服务器端(节点js):

app.post('/add-form', function(req, res, next){
    
    console.log(req.body);
    
});

在此致以最诚挚的问候, 叶凡

【问题讨论】:

  • 你说的“什么都不返回”是什么意思?你的意思是“什么都不记录”
  • 当您使用 ajax 发送表单内容时,服务器的回复不会像您以“常规”方式发送表单时那样显示在浏览器中。唯一会发生的事情是 jQuery 将调用您作为 success 传递的函数并传递回复。所以如果你检查你的控制台,你应该在那里看到服务器的输出。你为什么首先使用 $.ajax 来发送表单?
  • @ChrisG 鉴于这看起来像一个模态,我想 OP 想通过 AJAX 提交表单然后关闭模态
  • @Phil 可能是真的,但不一定。我们将不得不等待澄清。 Evgeniy?
  • 我明白了,你设置了哪个 express body parser 以及如何设置的?你也没有使用流行的multer,这让我觉得根本没有发生正文解析。

标签: javascript jquery ajax forms


【解决方案1】:

表单正在使用express 处理后端。表单是多部分的并处理文件上传。

解析表单数据需要多部分处理器。 @ChrisG 的评论建议使用 multer。预计 bodyParser 正在执行此解析。将其替换为需要根据 multer 文档导入 express 应用程序的 multer

const express = require('express')
const multer  = require('multer')
const upload = multer({ dest: 'uploads/' })

app.post('/add-form', function(req, res, next){  
  console.log(req.body);   
});

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-09-21
  • 1970-01-01
  • 2020-11-02
  • 2021-09-30
  • 2011-04-23
  • 2012-04-05
相关资源
最近更新 更多