Javascript 使用Jquery上载文件时出错&;AJAX

Javascript 使用Jquery上载文件时出错&;AJAX,javascript,jquery,ajax,form-data,Javascript,Jquery,Ajax,Form Data,我正在尝试使用jQuery和AJAX上传文件。我使用了HTML5支持的FormData对象。我正在使用IE11。下面是我的代码: <form id="tradeForm" method="post" action="/trade.action?method=addTrade" enctype="multipart/form-data"> Trade Type : <input type="text" id="tradeType" name="tradeType">

我正在尝试使用jQuery和AJAX上传文件。我使用了HTML5支持的
FormData
对象。我正在使用IE11。下面是我的代码:

<form id="tradeForm" method="post" action="/trade.action?method=addTrade" enctype="multipart/form-data">
    Trade Type : <input type="text" id="tradeType" name="tradeType">
    Trade Document : <input type="file" id="attachedFile" name="attachment" size="40">
</form>
还可以使用
$.ajax

$("#tradeForm").submit(function(event){
    event.preventDefault();
    var form = $(this);
    var formData = new FormData(form);
    url = form.attr("action");

    $.ajax({
        url: url,
        type: "POST",
        data: formData,
        processData: false,  // tell jQuery not to process the data
        contentType: false   // tell jQuery not to set contentType
    }).done(function(data) {
        console.log(data);
    });
});
我得到以下错误:

参数不是可选的

当使用
$.post
方法时

SCRIPT7002:XMLHttpRequest:网络错误0x2ef3,由于错误00002ef3,无法完成操作


当使用
$.ajax
方法时。如何解决这些错误?

构造函数需要一个doElement,而不是jQuery对象,因此需要修改
FormData()
定义。试试这个:

$("#tradeForm").submit(function(event){
    event.preventDefault();
    var $form = $(this);
    var formData = new FormData($form[0]); // note [0] here
    url = $form.prop("action");

    $.ajax({
        url: url,
        type: "POST",
        data: formData,
        processData: false,
        contentType: false
    }).done(function(data) {
        console.log(data);
    });
});
更改此项:

var formData = new FormData(form);


因为FormData需要表单,所以DOM元素
this
不是jQuery对象
$(this)

将表单变量更改为:

 var form  = document.getElementById('tradeForm');
 url = $(form).attr("action");

设置
contentType:“内容类型:多部分/表单数据”

我找到了问题的解决方案。以下是所做的更改:

  • 将DOM元素传递给FormData构造函数而不是Jquery对象。
    var formData=newformdata(document.getElementById(“tradeForm”)

  • 从html中的表单中删除属性-enctype=“multipart/form data”。
    否则将无法在服务器端读取表单数据

  • 使用正确的服务器URL(在我的例子中,URL是错误的)。错误消息-SCRIPT7002:XMLHttpRequest:networkerror 0x2ef3由于错误00002ef3而无法完成操作。这是误导


  • 您是否尝试使用serialize()函数?var formData=form.serialize()@cralfaro OP正在发送一个文件,因此serialize()在这里不适用。我仍然收到相同的错误。当我记录formData时,我会在控制台中看到[object formData]。我使用的是jQuery2.1.4版本。我仍然会遇到同样的错误。当我记录formData时,我在控制台中看到[object formData],更新var form=document.getElementById('tradeForm')后,您的站点是否有ssl;我遇到错误-对象不支持属性或方法“attr”更改
    url=form.getAttribute(“操作”)“attr”错误已解决,但获取网络错误0x2ef3。我已经在本地服务器上托管了我的应用程序。本地运行的应用程序需要SSL吗?
    
     var form  = document.getElementById('tradeForm');
     url = $(form).attr("action");