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 24 jQuery
jQuery+PHP+Mysql实现抽奖程序
Apr 12 jQuery
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
jQueryUI Sortable 应用Demo(分享)
Sep 07 jQuery
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
JavaScript实现离开页面前提示功能【附jQuery实现方法】
Sep 26 jQuery
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 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
?生?D片??C字串
2006/12/06 PHP
Blitz templates 最快的PHP模板引擎
2010/04/06 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php实现文件下载实例分享
2014/06/02 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
PHP网站自动化配置的实现方法(必看)
2017/05/27 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
NiftyCube——轻松实现圆角边框
2007/02/20 Javascript
event对象的方法 兼容多浏览器
2009/06/27 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
javascript 常用功能总结
2012/03/18 Javascript
Jquery封装tab自动切换效果的具体实现
2013/07/13 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
JS实现的另类手风琴效果网页内容切换代码
2015/09/08 Javascript
JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt
2015/11/17 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
微信小程序前端源码逻辑和工作流
2016/09/25 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
详解AngularJS1.x学习directive 中‘&amp; ’‘=’ ‘@’符号的区别使用
2017/08/23 Javascript
Vue 中 filter 与 computed 的区别与用法解析
2019/11/21 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
python中readline判断文件读取结束的方法
2014/11/08 Python
Python输出9*9乘法表的方法
2015/05/25 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
python3.5 email实现发送邮件功能
2018/05/22 Python
Pytorch 中retain_graph的用法详解
2020/01/07 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
python else语句在循环中的运用详解
2020/07/06 Python
佳能英国官方网站:Canon UK
2017/08/08 全球购物
台湾租车首选品牌:IWS艾维士租车
2019/05/03 全球购物
学校安全工作制度
2014/01/19 职场文书
2014年底工作总结
2014/12/15 职场文书
2015年车间管理工作总结
2015/07/23 职场文书