jquery+ajax实现异步上传文件显示进度条


Posted in jQuery onAugust 17, 2020

前言:

今天项目中加了一个上传文件加进度条的需求,我就搞了一下。时间宝贵不多说,直接进入正题。

异步上传文件是要用到ajax里的一个小的知识点:xhr(XML Http Request)一个对象,xhr对象也是ajax一个核心。

关于使用它也很简单:就四步(下面这样写也可以向后端进行发送请求)

var xhr=new XMLHttpRequest()//创建xhr对象
  xhr.open('请求方式','请求的地址')
  xhr.send()//发佛那个请求
  xhr.onreadystatechange=function(){
    if (xhr.readyState==4){//得到服务端返回的状态码
     console.log(xhr.responseText)//输出返回结果
    }
   }

介绍完xhr继续说上传文件的:(注意:在展示效果的时候,有一个知识点,就是css样式,一定要在添加的在<b>之前,否则当三上传的文件较小的时候,会不显示效果)

jquery+ajax实现异步上传文件显示进度条

//上传文件
$("#btnSubmit").click(function () {
 if (!(confirm("确定提交吗?"))) {
  return;
 }
 else {
  var formData = new FormData();//上传文件必须写的
  var fileNum = $("#file_input")[0].files.length;//上传文件的个数
  if (fileNum > 0) {
   var file = $("#file_input")[0].files;//拿到文件
   //console.log(file[0].name);文件名
   var nameSuffix = file[0].name.split(".");
   if (nameSuffix[nameSuffix.length - 1] != "zip") {
    alert("上传的文件不是zip类型的文件,请重新上传");
    $("#file_input").val("");//将选择的文件清除
   }//判断文件大小
   //else if ($("#file_input")[0].files[0].size / 1024 / 1024 > 1024) {
    //alert("请选择文件大小为1G以内文件");
    //$("#file_input").val("");
    //return;
   //}
   else {
    //formData.append(key,value)的值不能一样,否则只会拿到一个文件
    formData.append('file', file[0]);//拿到zip文件
    //console.log(formData.get('file'));查看添加到formData的文件
   }    
   $.ajax({
    url: 'https://www.baidu.com',//用百度测试的。哈哈
    type: 'post',
    async:true, //这里要设置异步上传,才能成功调用myXhr.upload.addEventListener('progress',function(e){}),progress的回掉函数
    dataType: 'json',
    //Accept:'text/html;charset=UTF-8',
    processData: false,// 告诉jQuery不要去处理发送的数据
    contentType: false,// 告诉jQuery不要去设置Content-Type请求头,否则后端拿不到数据
    data: formData,
    xhr:function(){      
     var myXhr = $.ajaxSettings.xhr();
     if(myXhr.upload){ //检查上传的文件是否存在
      myXhr.upload.addEventListener('progress',function(e){       
       var loaded = e.loaded; //已经上传大小情况 
       var total = e.total; //附件总大小 
       var percent = Math.floor(100*loaded/total)+"%"; //已经上传的百分比 
       //console.log("已经上传了:"+percent); 
       //显示进度条    
       $("#content").css("width",percent).css("height",20).css("margin-top",8).css("backgroundColor","#33CCFF").css("color","white").html("<b>"+percent+"</b>");                                
      }, false); // for handling the progress of the upload
     }
     return myXhr;
    },     
    success:function(data){      
     alert("上传成功!!!!");      
    },
    error:function(){
     alert("上传失败!");
      //上传失败后清空div的样式和内容
     $("#content").css("width",0).css("height",0).css("margin-top",0).css("backgroundColor","").text("");
    }
   })
  }
  else {
   alert("请选择文件上传");
  }
 }
})

效果展示:

jquery+ajax实现异步上传文件显示进度条

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery轻松实现无缝轮播效果
Mar 22 jQuery
jquery插件canvaspercent.js实现百分比圆饼效果
Jul 18 jQuery
jQuery.Ajax()的data参数类型详解
Jul 23 jQuery
jQuery实现简单日期格式化功能示例
Sep 19 jQuery
jQuery中extend函数简单用法示例
Oct 11 jQuery
jQuery中库的引用方法
Jan 06 jQuery
jQuery实现标签子元素的添加和赋值方法
Feb 24 jQuery
jQuery中的$是什么意思及 $. 和 $().的区别
Apr 20 jQuery
jQuery的Ajax接收java返回数据方法
Aug 11 jQuery
详解jQuery-each()方法
Mar 13 jQuery
jquery+php后台实现省市区联动功能示例
May 23 jQuery
jQuery实现小火箭返回顶部特效
Feb 03 jQuery
jQuery实现异步上传一个或多个文件
Aug 17 #jQuery
jQuery中event.target和this的区别详解
Aug 13 #jQuery
JQuery通过键盘控制键盘按下与松开触发事件
Aug 07 #jQuery
Jquery cookie插件实现原理代码解析
Aug 04 #jQuery
jQuery实现雪花飘落效果
Aug 02 #jQuery
jQuery实现滑动开关效果
Aug 02 #jQuery
jQuery实现开关灯效果
Aug 02 #jQuery
You might like
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
PHP使用Http Post请求发送Json对象数据代码解析
2020/07/16 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
修复ie8&amp;chrome下window的resize事件多次执行
2011/10/20 Javascript
JQuery DataTable删除行后的页面更新利用Ajax解决
2013/05/17 Javascript
Jqgrid表格随窗口大小改变而改变的简单实例
2013/12/28 Javascript
Jquery 过滤器(first,last,not,even,odd)的使用
2014/01/22 Javascript
jQuery通过控制节点实现仅在前台通过get方法完成参数传递
2015/02/02 Javascript
js时钟翻牌效果实现代码分享
2020/07/31 Javascript
Bootstrap每天必学之按钮(Button)插件
2016/04/25 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
微信小程序实现跑马灯效果完整代码(附效果图)
2018/05/30 Javascript
Bootstrap Table实现定时刷新数据的方法
2018/08/13 Javascript
微信小程序实现蒙版弹窗效果
2018/11/01 Javascript
node使用Mongoose类库实现简单的增删改查
2018/11/08 Javascript
javascript中数组的常用算法深入分析
2019/03/12 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
JavaScript 事件代理需要注意的地方
2020/09/08 Javascript
JavaScript canvas实现跟随鼠标移动小球
2021/02/09 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python 遍历字符串(含汉字)实例详解
2017/04/04 Python
opencv python 傅里叶变换的使用
2018/07/21 Python
python解析多层json操作示例
2019/12/30 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
Python实现粒子群算法的示例
2021/02/14 Python
详解使用CSS3的@media来编写响应式的页面
2017/11/01 HTML / CSS
Sneaker Studio罗马尼亚网站:购买运动鞋
2018/11/04 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
Hammitt官网:设计师手袋
2020/05/23 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
公司年会策划方案
2014/05/17 职场文书
竞聘上岗演讲
2014/05/19 职场文书
奥林匹克的口号
2014/06/13 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
分享很少见很有用的SQL功能CORRESPONDING
2022/08/05 MySQL