tl;博士:尽管我相信它们是相同的,但下面的两个脚本并不相同。为什么?
我会给你一些关于这篇文章的背景信息。我正在尝试构建一个图像上传表单,该表单发出 AJAX 请求以创建动态上传页面。因为我了解了 HTML5 的 File API,所以我试图在 AJAX 请求中使用它。我按照MDN上的一些不错的示例构建了自己的实例。我的工作脚本对 AJAX 请求使用直接的 JS,但我尝试构建一个使用 jQuery 的版本。我的问题是,为什么 jQuery 版本不能正常工作?据我所知,它是从 JS xhr 风格的 AJAX 到 jQuery 风格的 AJAX 的直接移植。(这个问题的目的是对jQuery的AJAX API进行学术理解;由于我已经有一个工作脚本,我的实际需求已经得到满足)
这是有效的 Javascript AJAX 请求:
$("form").submit(function(){
var file = $("input:file").get(0).files[0];
var xhr = new XMLHttpRequest();
var fd = new FormData();
xhr.open("POST", "/upload", true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
};
fd.append('img', file);
xhr.send(fd);
return false;
});
和非工作 jQuery 版本:
$("form").submit(function(){
var fd = new FormData();
var file = $("input:file").get(0).files[0];
fd.append('img', file);
$.post("/upload", fd, function(data){
alert(data);
});
return false;
});