使用jQuery.ajax提交文件会产生TypeError

use*_*070 18 javascript api jquery form-data

我试图使用jQuery的ajax方法从表单提交文件:

var ofile=document.getElementById('image').files[0];
var formdata = new FormData();
formdata.append("image",ofile);

$.ajax({
    url:'elements/save_elements',
    data:formdata,
    type:'POST'
});
Run Code Online (Sandbox Code Playgroud)

这导致错误TypeError: 'append' called on an object that does not implement interface FormData.

是什么导致这个错误?它不会发生在实际的formdata.append,但在jQuery内部.

小智 102

类似的代码我遇到了同样的问题.关于此错误的信息严重缺乏,因此OP没有详细说明:

通过一些调试,我意识到错误是由jquery深度的ajax调用引发的,而不是实际的追加.结果我忘了添加processData: false, contentType: false到ajax请求; 这样做可以解决问题.


小智 7

当您将以下内容添加到 ajax 对象时,它工作正常:

contentType: false,
processData: false,
Run Code Online (Sandbox Code Playgroud)

所以它应该看起来像:

$.ajax({
    url:'elements/save_elements',
    data:formdata,
    type:'POST',
    contentType: false,
    processData: false,
});
Run Code Online (Sandbox Code Playgroud)