【问题标题】:Html5 ajax file upload progress listener not triggering when upload 100% on Firefox在 Firefox 上上传 100% 时未触发 Html5 ajax 文件上传进度监听器
【发布时间】:2012-03-01 19:51:46
【问题描述】:

我正在通过 ajax 上传文件并在上传后处理图像。 当我尝试在 firefox 上通过 ajax 上传图像文件时,当上传百分比达到 100% 但文件上传成功时,xhr 进度事件不会触发我的进度功能。

上传进度 100% 时触发谷歌浏览器,但火狐没有。

简要介绍一下我的上传脚本:

$("#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%时),但上传完成时不触发。

【问题讨论】:

    标签: jquery ajax-upload


    【解决方案1】:

    除了您当前的处理程序之外,再添加两个: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.");
    }
    

    【讨论】:

    • 我正在向 xhr 添加负载侦听器,但它永远不会触发侦听器功能。
    • 在你说之后我尝试了“负载”侦听器。在load 使用写入“负载”侦听器触发“零或一次”,当负载侦听器触发一次时,什么时候触发?
    • 如果上传成功则触发“load”,然后触发“loadend”。如果不成功,只会触发“loadend”。我已经更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多