[jquery]為jQuery.ajax添加onprogress事件


原理:

給XMLHttpRequest對象的upload屬性綁定onprogress方法監聽上傳過程

var xhr = new XMLHttpRequest();  xhr.upload.onprogress = function(e) {}

因為jQuery默認使用的XMLHttpRequest對象是內部生成的無法直接給jq的xhr綁定onprogress方法

所以只要給jQuery重新生成一個綁定了onprogress的XMLHttpRequest對象即可實現

首先封裝一個方法 傳入一個監聽函數 返回一個綁定了監聽函數的XMLHttpRequest對象

var xhrOnProgress=function(fun) {
  xhrOnProgress.onprogress = fun; //綁定監聽
  //使用閉包實現監聽綁
  return function() {
    //通過$.ajaxSettings.xhr();獲得XMLHttpRequest對象
    var xhr = $.ajaxSettings.xhr();
    //判斷監聽函數是否為函數
    if (typeof xhrOnProgress.onprogress !== 'function')
      return xhr;
    //如果有監聽函數並且xhr對象支持綁定時就把監聽函數綁定上去
    if (xhrOnProgress.onprogress && xhr.upload) {
      xhr.upload.onprogress = xhrOnProgress.onprogress;
    }
    return xhr;
  }
}

 

上傳時使用$.ajax方法

var formData = new FormData(document.forms[0]);
$.ajax({ url : url, type : 'POST',
  data : formData,
  //不處理表單數據
  processData : false,
  //不處理contentType
  contentType : false,
  beforeSend:function(){
      console.log("start transfer");
  },
  success : function(responseStr) {
      console.log(responseStr);
  },
  error : function(responseStr) {
     console.log("error");
  },
 //用自定義的xhr代替jquery的xhr xhr:xhrOnProgress(function(e){ var percent=e.loaded / e.total;//計算百分比 }) });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM