鍍金池/ 問答/HTML/ ajax的onprogress事件下載過程只能觸發(fā)一次嗎

ajax的onprogress事件下載過程只能觸發(fā)一次嗎

剛開始用的jq的ajax里面xhr對象綁定onprogress事件的辦法,只觸發(fā)了一次,以為是jq的問題

var xhrOnProgress=function(fun) {
  xhrOnProgress.onprogress = fun; 
  return function() {
        $.ajaxSettings.xhr();
        var xhr = $.ajaxSettings.xhr();
        if (typeof xhrOnProgress.onprogress !== 'function')
              return xhr;
        if (xhrOnProgress.onprogress && xhr.upload) {
              xhr.upload.onprogress = xhrOnProgress.onprogress;
        }
        return xhr;
  }
}

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

為什么progress事件只觸發(fā)了一次,不是不停的觸發(fā)嗎,都準(zhǔn)備用這個寫進(jìn)度條的

    var xhr=new XMLHttpRequest();
    xhr.onreadystatechange=function(){
        console.log(xhr.responseText);
    }
    xhr.onprogress=function(e){
        console.log(xhr);
        console.log(e)
        console.log(e.loaded);
    }
    xhr.open('get','http://127.0.0.1:8080/db',true);
    xhr.send();

我看各種文檔api也都是說ajax上傳和下載過程中,會在服務(wù)器指定時間間隔觸發(fā)progress事件。

是支持下載的,但是我的為什么不行,我純粹原生js寫的ajax也是不行。是還有哪些參數(shù)要設(shè)置嗎,求指教

請求的json,數(shù)據(jù)很大,用時我看了估計有20秒左右,所以也不是文件大小問題

回答
編輯回答
尐懶貓

你傳的多大的文件,如果文件很小,一次就傳完了, 只會觸發(fā)一次

2017年1月11日 12:30
編輯回答
離觴

你的問題解決了,我也向做個進(jìn)度條,也碰到了相同的問題

2018年1月2日 00:32
編輯回答
葬憶

改個寫法呢?

xhr: function() {
    var myXhr = $.ajaxSettings.xhr()
    if(myXhr.upload) {
        myXhr.upload.addEventListener('progress', progressHandlingFunction, false)
    }
    return myXhr
}
function progressHandlingFunction (e) {
  var percent=e.loaded / e.total;//計算百分比
}
2018年4月6日 14:19