是什么导致了“未捕获的类型错误:非法调用”?在这段代码中
What is causing "Uncaught TypeError: Illegal Invocation" in this code?
Google Chrome的控制台告诉我
Uncaught TypeError: Illegal Invocation
$('#txtUploadFile').on('change', function (e) {
var files = e.target.files;
if (files.length > 0) {
if (window.FormData !== undefined) {
var data = new FormData();
for (var x = 0; x < files.length; x++) {
data.append("file" + x, files[x]);
}
$.ajax({
xhr: function() {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total * 100;
console.log("percentComplete = " + percentComplete);
}
else
{
console.log("lengthComputable evaluated to false;")
}
}, false);
xhr.addEventListener("progress", function(evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total * 100;
console.log("percentComplete = " + percentComplete);
}
else
{
console.log("lengthComputable evaluated to false;")
}
}, false);
return xhr;
},
type: 'POST',
url: '@Url.Action("upload","FileUploadAsync")',
data: data,
success: function(data){
console.log("success!");
}
});
} else {
alert("This browser doesn't support HTML5 file uploads!");
}
}
});
我看了StackOverflow关于这个问题的帖子,没有一个原因与我在我的帖子中看到的任何东西有关。我不确定它是否重要,但我可以张贴HTML和控制器,如果这可能是问题的一部分。
您缺少$.ajax
调用的两个选项,这些
contentType: false,
processData: false,
让它像这样
$.ajax({
xhr: function () {
var xhr = new window.XMLHttpRequest();
xhr.upload.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total * 100;
console.log("percentComplete = " + percentComplete);
} else {
console.log("lengthComputable evaluated to false;")
}
}, false);
xhr.addEventListener("progress", function (evt) {
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total * 100;
console.log("percentComplete = " + percentComplete);
} else {
console.log("lengthComputable evaluated to false;")
}
}, false);
return xhr;
},
type: 'POST',
url: '@Url.Action("upload","FileUploadAsync")',
data: data,
contentType: false,
processData: false,
success: function (data) {
console.log("success!");
}
});
如果你让jQuery内部处理文件,它会抛出一个Illegal invocation
错误。
相关文章:
- 如何从Objective-C代码中调用javascript代码
- 问号在这段代码中是什么意思
- 我怎样才能用速记函数来写这段代码
- AJAX调用运行C代码的最佳实践
- 这段代码的含义是什么<%=一些可变的%>
- 如何使用jsp以相同的形式调用java代码和javascript代码
- 为什么这两段代码返回的值不同
- 如何重复某段代码
- Mozilla并没有完美地执行这段代码,尽管它适用于Chrome和IE
- 这段代码的含义是什么 'start = +start ||0;' 在 JavaScript 中
- Eloquent JS第5章中的这段代码是做什么的
- JQuery:这段代码是什么意思
- 这段代码中发生了什么
- 这段代码有什么问题(responsible html-css-js)
- 从Javascript调用php代码-AJAX响应整个页面's html
- 有人可以解释一下这段代码在做什么吗?调用 Class.create() 时实际会发生什么
- 如果没有jQuery,javascript如何检查多个ajax调用是否已经完成,一旦完成,就执行一段代码
- 是否有一种方法可以在HTML中指向特定Javascript文件的函数调用?或者,我是否在这段代码中做了一些根本性的错误
- 是什么导致了“未捕获的类型错误:非法调用”?在这段代码中
- 这段代码使用[].filter.调用