Javascript 无法构造';FormData';

Javascript 无法构造';FormData';,javascript,dropzone,Javascript,Dropzone,当我在dropzone上传文件时,它不工作。通常情况下,它工作得很好,但从1个月以来,我出现了以下JS错误: Uncaught TypeError: Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'. 这就是我使用FormData时的代码: var form_data = new FormData("#my-awesome-dropzone"); 双区码 Drop

当我在dropzone上传文件时,它不工作。通常情况下,它工作得很好,但从1个月以来,我出现了以下JS错误:

Uncaught TypeError: Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.
这就是我使用FormData时的代码:

 var form_data = new FormData("#my-awesome-dropzone");
双区码

  Dropzone.options.myAwesomeDropzone = {
    maxFilesize: 5,
    maxFiles: 1,    
    addRemoveLinks: true,
    dictResponseError: 'Server not Configured',
    acceptedFiles: ".pdf",
    init:function(){
      var self = this;
      // config
      self.options.addRemoveLinks = true;
      self.options.dictRemoveFile = "Delete";
      //New file added
      self.on("addedfile", function (file) {
          console.log('new file added ', file);
             if(!confirm("Do you want to upload the file?")){
                this.removeFile(file);
                return false;
            }

      });
      // Send file starts
      self.on("sending", function (file, xhr, formData) {
        console.log('upload started', file);
        $('.meter').show();

            var form_data = new FormData("#my-awesome-dropzone");

            $.ajax({
                url: '/settings/uploadFile', 
                data: 'file=' + file.name ,
                type: 'POST',
                processData: false,
                contentType: false,
                success: function(response) {
                }
            });
      });
      
      // File upload Progress
      self.on("totaluploadprogress", function (progress) {
        console.log("progress ", progress);
        $('.roller').width(progress + '%');
      });

      self.on("queuecomplete", function (progress) {
        $('.meter').delay(999).slideUp(999);
      });
      
      // On removing file
      self.on("removedfile", function (file) {
        console.log(file);
      });
    }
HTML代码

     <form  enctype="multipart/form-data" action="/settings/uploadFile"  method="post" class="dropzone" 
                        id="my-awesome-dropzone">

         
                     </form> 


编辑01-08-2019:好的,刚刚测试过,它可以在Microsoft Edge 44.17763.1.0上运行,但不能在Google Chrome或Firefox上运行,有什么解释吗?

您正在将一个字符串传递给。正如错误所说,它需要的是表单元素,而不是字符串。因此:

var form_data = new FormData(document.getElementById("my-awesome-dropzone"));
实例:

var data=newformdata(document.getElementById(“我的dropzone”);
log(“Created FormData,”+[…data.keys()].length+“keys in data”)


您还可以附加HTML吗?请用一个演示问题的示例更新您的问题,最好是使用堆栈片段(
[]
工具栏按钮;)运行的问题。虽然堆栈代码段不允许提交表单,但正如您在我的回答中的示例所示,您仍然可以创建
FormData
,因此应该能够复制该问题。好的,我将尝试为我的案例制作一个示例。但我想这是由浏览器决定的不是吗?因为我的代码过去可以在所有浏览器上运行,而现在它只能在Microsoft Edge上运行,为什么?@MasterSinge-那么你的
id=“my Aweasome dropzone”
元素不是
表单
元素,或者当代码运行时它还不存在,这会使
getElementById
返回
null
[当传递给
FormData
构造函数时,也会导致此错误])@tjcrowder-当我控制台记录日志时,它返回数据=>如果您的html中没有定义标记,但您正在调用另一个元素id上的新FormData,则也会发生此错误。@MasterSinge-如果我从您的问题复制
表单
html并将其粘贴到文件中,然后将上面答案中的代码复制到中的
脚本
那个文件(在
表单之后,所以我知道它存在),它在Chrome上起作用。我的错误是我在另一个表单中有一个表单