Jquery 和 HTML FormData 返回“未捕获的 TypeError: 非法调用”

我使用这个脚本来上传我的图像文件: 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

你能帮我吗?

124281 次浏览

jQuery processes the data attribute and converts the values into strings.

Adding processData: false to your options object fixes the error, but I'm not sure if it fixes the problem.

Demo: http://jsfiddle.net/eHmSr/1/

Adding processData: false to the $.ajax options will fix this issue.

My experience:

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

The problem is that I forgot to add .val() to the end of $('#myInputField'); this action makes me waste time trying to figure out what was wrong, causing Illegal Invocation Error, since $('#myInputField') was in a different file than that system pointed out incorrect code. Hope this answer help fellows in the same mistake to avoid to loose time.

In my case, there was a mistake in the list of the parameters was not well formed. So make sure the parameters are well formed. For e.g. correct format of parameters

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

I had the same problem

I fixed that by using two options

contentType: false
processData: false

Actually I Added these two command to my $.ajax({}) function