4

私は ajax 経由でファイルをアップロードし、アップロード後に画像を処理しています。Firefox で ajax 経由で画像ファイルをアップロードしようとしたとき、アップロード パーセントが 100% でファイルが正常にアップロードされたときに、xhr 進行状況イベントが進行機能をトリガーしませんでした。

アップロードが 100% 進行すると Google chrome がトリガーされますが、firefox はトリガーされません。

私のアップロードスクリプトを簡単に:

$("#uploadbutton").click(function(){
   var xhr=new XMLHttpRequest()
   ,fd=new FormData();

   xhr.upload.addEventListener("loadstart", uploadStart, false);
   xhr.upload.addEventListener("progress", uploadProgress, false);
   xhr.addEventListener("error", uploadFailed, false);

   xhr.open("POST", mainurl+"ajaxupload.php");

   $.each($("#upload_input").files,function(i,file){
     fd.append("files_"+i,file);
   });    

  xhr.send(fd);

});

function uploadProgress(event){
   var percentComplete = Math.round(event.loaded * 100 / event.total);
   console.log("pecent ",percentComplete);
}

アップロードの開始時、uploadProgress 関数は 1 回実行されますが (ほとんどの場合、アップロード パーセンテージ 80% の場合)、アップロードの終了時にはトリガーされません。

4

1 に答える 1

2

現在のハンドラーに加えて、さらに 2 つのハンドラーを追加します: load (正常に完了した場合に起動)、loadend (常に最後に起動)。

// zero or once
xhr.addEventListener("load", uploadSuccess, false);
function uploadSuccess(event) {
    console.log("Upload successful.");
}

// once
xhr.addEventListener("loadend", uploadComplete, false);
function uploadComplete(event) {
    console.log("All done.");
}
于 2012-09-05T01:00:20.463 に答える