使用jQuery.ajax提交文件时出现TypeError错误

25

我正在尝试使用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'
});

这导致错误TypeError:在未实现FormData接口的对象上调用“append”

什么造成了这个错误? 它不是发生在实际的formdata.append, 而是在jQuery内部。


你使用的是哪个浏览器? - Chickenrice
好的,没问题先生,我得到了答案。 - user2889070
3个回答

112

我遇到了相似的问题,代码也差不多。关于这个错误信息的相关信息相当缺乏,所以既然楼主没有进一步阐述:

通过调试发现,错误是在jquery深层的ajax调用中抛出的,而不是实际的附加代码。 结果发现我忘记在ajax请求中添加processData: false, contentType: false;这样做解决了问题。


谢谢。我了解了processData:false的内容,但不知道contentType。 - deach
1
原来如果你将 "processData" 拼错成 "proccessData",你也会得到相同的错误。合理。 - iiminov
很高兴当我在谷歌搜索错误信息时,这是第一项显示出来的东西。 - w--
@w-- 你真幸运!我则是在读了50多个问题后才找到答案。因为我——在编程15年之后——没有立刻谷歌搜索错误信息,而是搜了很多措辞不当的祝福…… - maxpower9000
但是...我需要使用multipart/form-data作为我的content-type...因为这是我的REST API所需的...也许我可以假设传入的请求都是multipart/form-data类型的? - CaffeinateOften

8
当您向ajax对象添加以下内容时,它可以正常工作:
contentType: false,
processData: false,

因此它应该看起来像这样:

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

3
将这些参数添加到ajax中可以解决问题。
$.ajax({
      url: 'upload_ajax.php',
       type: 'POST',
       data: formData,
       contentType: false,
       processData: false,

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接