ajax的onprogress事件下载过程只能触发一次吗

刚开始用的jq的ajax里面xhr对象绑定onprogress事件的办法,只触发了一次,以为是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,   //不处理表单数据  
   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事件只触发了一次,不是不停的触发吗,都准备用这个写进度条的

    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上传和下载过程中,会在服务器指定时间间隔触发progress事件。

是支持下载的,但是我的为什么不行,我纯粹原生js写的ajax也是不行。是还有哪些参数要设置吗,求指教

请求的json,数据很大,用时我看了估计有20秒左右,所以也不是文件大小问题

阅读 7.5k
3 个回答

你传的多大的文件,如果文件很小,一次就传完了, 只会触发一次

改个写法呢?

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;//计算百分比
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题