tl;dr: 以下の 2 つのスクリプトは同一ではないと思いますが、同一ではありません。なんで?
この記事の背景情報をお伝えします。動的アップロード ページを作成するために 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;
});