ajax獲取上傳進度

找了很久的獲取上傳進度---記錄一下javascript

原文地址http://www.javashuo.com/article/p-qiuuiwli-v.htmljava

$.ajax({
  type: "post",
  url: uploadUrl,
  data: formData,
  processData: false,
  contentType: false,
  xhr : function() { //獲取ajaxSettings中的xhr對象,爲它的upload屬性綁定progress事件的處理函數
    myXhr = $.ajaxSettings.xhr();
    if (myXhr.upload) { //檢查upload屬性是否存在
     //綁定progress事件的回調函數
      myXhr.upload.addEventListener(
        'progress',
        progressHandlingFunction,
        false);
      }
      return myXhr; //xhr對象返回給jQuery使用
    },
  beforeSend: function() {
    ot = new Date().getTime();   //設置上傳開始時間
    oloaded = 0;//設置上傳開始時,以上傳的文件大小爲0
    console.log("開始上傳")
  },
  success: function (data) {
    console.log("上傳成功")
  },
  error: function (e) {
    console.log("上傳失敗")
  }
});
function progressHandlingFunction(evt) {
    var nt = new Date().getTime();//獲取當前時間
    var pertime = (nt-ot)/1000; //計算出上次調用該方法時到如今的時間差,單位爲s
    ot = new Date().getTime(); //從新賦值時間,用於下次計算
    var perload = evt.loaded - oloaded; //計算該分段上傳的文件大小,單位b
    oloaded = evt.loaded;//從新賦值已上傳文件大小,用如下次計算
    //上傳速度計算
    var speed = perload/pertime;//單位b/s
    var bspeed = speed;
    var units = 'b/s';//單位名稱
    if(speed/1024>1){
        speed = speed/1024;
        units = 'k/s';
    }
    if(speed/1024>1){
        speed = speed/1024;
        units = 'M/s';
    }
    speed = speed.toFixed(1);
    //剩餘時間
    var resttime = ((evt.total-evt.loaded)/bspeed).toFixed(1);
    var percent = evt.loaded / evt.total * 100;
    console.log('當前速度:'+speed+units+',剩餘時間:'+resttime+'s,當前進度:'+percent.toFixed(2)+"%")
}
相關文章
相關標籤/搜索