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仿京东商品放大浏览页面
Jun 06 jQuery
jQuery回调方法使用示例
Jun 26 jQuery
jquery版轮播图效果和extend扩展
Jul 18 jQuery
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
Dec 24 jQuery
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 jQuery
jQuery实现点击图标div循环放大缩小功能
Sep 30 jQuery
jquery实现动态添加附件功能
Oct 23 jQuery
jQuery实现的中英文切换功能示例
Jan 11 jQuery
jQuery Migrate 插件用法实例详解
May 22 jQuery
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
Nov 07 jQuery
jQuery实现消息弹出框效果
Dec 10 jQuery
jQuery 隐藏/显示效果函数用法实例分析
May 20 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
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
CodeIgniter php mvc框架 中国网站
2008/05/26 PHP
php下载文件,添加响应头的简单实例
2016/09/22 PHP
asp.net和php的区别点总结
2019/10/10 PHP
基于javascript 闭包基础分享
2013/07/10 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
2013/12/23 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
js同源策略详解
2015/05/21 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
详解vue-cli中模拟数据的两种方法
2018/07/03 Javascript
解决vue点击控制单个样式的问题
2018/09/05 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
详解小程序循环require之坑
2019/03/08 Javascript
Vue实现页面添加水印功能
2019/11/09 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python实现用于测试网站访问速率的方法
2015/05/26 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
Flask框架配置与调试操作示例
2018/07/23 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
2019/02/11 Python
Pandas读取并修改excel的示例代码
2019/02/17 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
2019/10/30 Python
Python插入Elasticsearch操作方法解析
2020/01/19 Python
python中def是做什么的
2020/06/10 Python
python 利用opencv实现图像网络传输
2020/11/12 Python
工作推荐信模板
2015/03/25 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
预备党员入党感言
2015/08/01 职场文书
python中的sys模块和os模块
2022/03/20 Python
MongoDB支持的数据类型
2022/04/11 MongoDB