一直在用ajax,但是没有做进度条,原来$.ajax里面封装了xhr,只要从这里面取得上传进度。
这是将回调写到变数里
将xhr对像放到 $.ajax({....,xhr});
$.ajax({ url:'xxxx', ...., //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数 xhr: function(){ myXhr = $.ajaxSettings.xhr(); //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数 if(myXhr.upload){ //绑定progress事件的回调函数 myXhr.upload.addEventListener('progress',progressHandlingFunction, false); } //xhr对象返回给jQuery使用 return myXhr; }, success:function(){} });
绑定到'progress' 这里要自己再定义progressHandlingFunction
//上传进度回调函数:function progressHandlingFunction(e) { if (e.lengthComputable) { //e.loaded 上传大小 //e.total 文件大小 var percent = e.loaded/e.total; } }
这是将回调写到ajax过程中
先定一个方法
var jqureAjaxXhrOnProgress = function(fun) { jqureAjaxXhrOnProgress.onprogress = fun; //绑定监听 //使用闭包实现监听绑 return function() { //通过$.ajaxSettings.xhr();获得XMLHttpRequest对象 var xhr = $.ajaxSettings.xhr(); //判断监听函数是否为函数 if (typeof jqureAjaxXhrOnProgress.onprogress !== 'function') return xhr; //如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去 if (jqureAjaxXhrOnProgress.onprogress && xhr.upload) { xhr.upload.onprogress = jqureAjaxXhrOnProgress.onprogress; } return xhr; } }
再到$.ajax({...,})
$.ajax({ url:'xxxx', ...., xhr:jqureAjaxXhrOnProgress(function(e){ var percent=e.loaded / e.total; $('#ajaxfilestext').html(percent); }), success:function(){} });
再根据自己的需求写进度条。
作者:吴孝青
链接:https://www.jianshu.com/p/061ce2b5ed44
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦