Jquery和HTML FormData返回"Uncaught TypeError:Illegal invocation"

Cai*_*ifa 73 ajax upload jquery html5

我正在使用此脚本上传我的图像文件:http://jsfiddle.net/eHmSr/

$('.uploader input:file').on('change', function() {
  $this = $(this);

  $('.alert').remove();

  $.each($this[0].files, function(key, file) {
    $('.files').append('<li>' + file.name + '</li>');

    data = new FormData();
    data.append(file.name, file);

    $.ajax({
      url: $('.uploader').attr('action'),
      type: 'POST',
      dataType: 'json',
      data: data
    });
  });
});
Run Code Online (Sandbox Code Playgroud)

但是当我点击上传按钮时,JavaScript控制台会返回以下错误:

Uncaught TypeError: Illegal invocation 
Run Code Online (Sandbox Code Playgroud)

jQuery错误

你能帮助我吗?

Ble*_*der 157

jQuery处理data属性并将值转换为字符串.

添加processData: false到您的选项对象修复了错误,但我不确定它是否解决了问题.

演示:http://jsfiddle.net/eHmSr/1/

  • 我修复它,只需添加`contentType:false`.再次感谢! (19认同)
  • 在我的情况下,问题是,我使用var data = {}; 但是,您必须使用var data = new FormData(); (3认同)

Ham*_*mid 12

我有同样的问题我修复了使用两个选项

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

实际上我将这两个命令添加到我的$ .ajax({})函数中

  • 这些可以与 $.post 一起使用吗?如果是这样怎么办? (2认同)

小智 8

添加processData: false$.ajax选项将解决这个问题.