javascript - node js通过jquery表单数据发送post请求报错

标签 javascript jquery node.js form-data ajaxform

我想通过 jQuery post 请求发送一个文件。我的 node.js 将读取文件并将 data 插入 Mongodb 中。

这是我的 node.js 函数:

upload: function(req, res){
    var FileName;
      req.file('myFile').upload(function(err,files){
      var i = 1;
        if(err) return res.serverError(err);
      FileName = files[0].filename; ......

如果直接从 html 发送一个 post 请求,上面的函数工作正常,如下所示:

<form method="post" action="/indi id="indiform" enctype="multipart/form-data">
        <input type="file" name="myFile" id="myIndifile"/>
        <input type="submit" id="indisubmitbutton" value="Submit" name="upload" class="btn btn-primary" id = "uploadFile"/>   
</form>

现在我想从 jQuery 提交 post 请求并将响应 data 处理为:

var file = $("#myIndifile")[0].files[0];
$.ajax({
    type: 'post',
    url: '/indi',
    async: false,
    data: JSON.stringify({ myFile:file }),
    contentType: "application/json",
    success: function (data) {
      alert(" Number of lines Read  :"+data[0].lines+"\n"+"Number of records saved:"+data[1].saved);        
    }
  });

这是抛出 无法读取 FileName = files[0].filename 错误中未定义的属性“文件名”

如果我这样发送请求:

var file = $("#myIndifile")[0].files[0];
var formdata = new FormData();
formdata.append("myFile", file);
  $.ajax({
    type: 'post',
    url: '/indi',
    data: formdata,
    contentType: "multipart/form-data",
    success: function (data) {
      Pace.stop;
      alert(" Number of lines Read  :"+data[0].lines+"\n"+"Number of records saved:"+data[1].saved);        
    }
  });

javascript 抛出 Uncaught TypeError: Illegal invocation error.

如果我从 html 发送 post 请求,一切正常。

如何从包含文件内容的 jQuery 发送 post 请求?

最佳答案

第二个代码片段的问题是您设置的内容类型不正确,多部分表单数据需要一个边界。但是,当您将 FormData 对象传递给 $.ajax 时,如果您将 contentType 和 processData 设置为 false,它会为您设置正确的内容类型和边界。

var file = $("#myIndifile")[0].files[0];
var formdata = new FormData();
formdata.append("myFile", file);
  $.ajax({
    type: 'post',
    url: '/indi',
    data: formdata,
    contentType: false,
    processData: false,
    success: function (data) {
      Pace.stop;
      alert(" Number of lines Read  :"+data[0].lines+"\n"+"Number of records saved:"+data[1].saved);

    }
});

关于javascript - node js通过jquery表单数据发送post请求报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24811957/

相关文章:

javascript - 预加载音频文件/事件?

node.js - 使用 Nodejs 无法通过 Gmail smtp 发送电子邮件

javascript - 只能发出一个 GET 请求,没有错误 : "Can' t set headers after they are sent. "

javascript - 右键弹出菜单慢

jquery - 如何搜索元素名称+变量的一部分

c# - 从 onchange 触发 .click() 时,IE9 上出现 "SCRIPT5 Access is denied"错误

javascript - 在文本中查找格式化问题并从中创建元素

javascript - 在 Meteor.js 中设置自动表单中省略字段的值

javascript - <a> 标签中的 href 与 Angular 中的 window.open

javascript - 绘制ckeditor插件创建的chart.js