Jquery和HTML FormData返回“Uncaught TypeError:Illegal invocation”

时间:2012-10-06 01:36:27

标签: jquery ajax html5 upload

我正在使用此脚本上传我的图片文件: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
    });
  });
});

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

Uncaught TypeError: Illegal invocation 

jQuery Error

你能帮助我吗?

5 个答案:

答案 0 :(得分:155)

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

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

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

答案 1 :(得分:8)

processData: false添加到$.ajax选项可解决此问题。

答案 2 :(得分:7)

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

修复了这个问题
struct info : Decodable {
let list : [lists]
}
struct lists : Decodable{
let title : String?
let images : [String]?
}

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

答案 3 :(得分:3)

我的经历:

  var text = $('#myInputField');  
  var myObj = {title: 'Some title', content: text};  
  $.post(myUrl, myObj, callback);

问题是我忘了将.val()添加到$(&#39;#myInputField&#39;)的末尾;这个动作让我浪费时间试图找出错误, 导致非法调用错误 ,因为$(&#39; #myInputField&#39;)处于不同的状态文件比该系统指出错误的代码。希望这个答案可以帮助同伴避免错误的时间。

答案 4 :(得分:-1)

在我的情况下,参数列表中的错误没有很好地形成。 因此,请确保参数形成良好。 对于例如正确的参数格式

data: {'reporter': reporter,'partner': partner,'product': product}