Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 节点js通过jquery表单发送post请求数据错误_Javascript_Jquery_Node.js_Form Data_Ajaxform - Fatal编程技术网

Javascript 节点js通过jquery表单发送post请求数据错误

Javascript 节点js通过jquery表单发送post请求数据错误,javascript,jquery,node.js,form-data,ajaxform,Javascript,Jquery,Node.js,Form Data,Ajaxform,我想通过jQuerypostrequest发送一个文件。My node.js将读取文件并将数据插入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 =

我想通过jQuery
post
request发送一个文件。My node.js将读取文件并将
数据插入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>
这是在文件名=文件[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抛出未捕获的类型错误:非法调用错误

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


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

第二个代码段的问题是,您设置的内容类型不正确,多部分formdata需要一个边界。但是,当您将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的。两者都很好

var fd = new FormData;

    var file = document.getElementById('myIndifile').files[0];
    fd.append('myFile', file);
    var xhr = new XMLHttpRequest();
    xhr.file = file; 
    xhr.addEventListener('progress', function(e) {
        var done = e.position || e.loaded, total = e.totalSize || e.total;
        console.log('xhr progress: ' + (Math.floor(done/total*1000)/10) + '%');
    }, false);
    if ( xhr.upload ) {
        xhr.upload.onprogress = function(e) {
            var done = e.position || e.loaded, total = e.totalSize || e.total;
            console.log('xhr.upload progress: ' + done + ' / ' + total + ' = ' + (Math.floor(done/total*1000)/10) + '%');
        };
    }
    xhr.onreadystatechange = function(e) {
        if ( 4 == this.readyState ) {
            console.log(['xhr upload complete', e]);
            var resdata = JSON.parse(xhr.responseText);
            alert(" Number of lines Read  :"+resdata[0].lines+"\n"+"Number of records saved:"+resdata[1].saved);

        }
    };
    xhr.open('post', '/indi', true);
    xhr.send(fd);
});
看看
var fd = new FormData;

    var file = document.getElementById('myIndifile').files[0];
    fd.append('myFile', file);
    var xhr = new XMLHttpRequest();
    xhr.file = file; 
    xhr.addEventListener('progress', function(e) {
        var done = e.position || e.loaded, total = e.totalSize || e.total;
        console.log('xhr progress: ' + (Math.floor(done/total*1000)/10) + '%');
    }, false);
    if ( xhr.upload ) {
        xhr.upload.onprogress = function(e) {
            var done = e.position || e.loaded, total = e.totalSize || e.total;
            console.log('xhr.upload progress: ' + done + ' / ' + total + ' = ' + (Math.floor(done/total*1000)/10) + '%');
        };
    }
    xhr.onreadystatechange = function(e) {
        if ( 4 == this.readyState ) {
            console.log(['xhr upload complete', e]);
            var resdata = JSON.parse(xhr.responseText);
            alert(" Number of lines Read  :"+resdata[0].lines+"\n"+"Number of records saved:"+resdata[1].saved);

        }
    };
    xhr.open('post', '/indi', true);
    xhr.send(fd);
});