jquery+ajax实现上传图片并显示上传进度功能【附php后台接收】


Posted in jQuery onJune 06, 2019

本文实例讲述了jquery+ajax实现上传图片并显示上传进度功能。分享给大家供大家参考,具体如下:

jquery上传文件用的formdata,上传进度条需要添加xhr的onprogress

html代码如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
  <title>Ding Jianlong Html</title>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/layer/2.3/skin/layer.css" rel="external nofollow" rel="stylesheet">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/layer/2.3/layer.js"></script>
</head>
<body>
 <!-- 外层div 进度条的整体视觉和位置设置 -->
  <div style="width:300px;height: 20px;border: 1px solid #CCC;">
  <!-- 内层div 逐渐递增的进度条 -->
    <div id="jdt" style="height: 20px;"></div>
  </div>
  <p>总大小<span id="total"></span>;已上传<span id="loaded"></span>;</p><br>
  <form id="mainForm">
    选择文件:<input type="file" name="file">
    <input type="button" value="上传" onclick="upload()">
  </form>
<script>
  var uploading = false;
 function upload(){
    //首先封装一个方法 传入一个监听函数 返回一个绑定了监听函数的XMLHttpRequest对象
    var xhrOnProgress=function(fun) {
      xhrOnProgress.onprogress = fun; //绑定监听
      //使用闭包实现监听绑
      return function() {
        //通过$.ajaxSettings.xhr();获得XMLHttpRequest对象
        var xhr = $.ajaxSettings.xhr();
        //判断监听函数是否为函数
        if (typeof xhrOnProgress.onprogress !== 'function')
          return xhr;
        //如果有监听函数并且xhr对象支持绑定时就把监听函数绑定上去
        if (xhrOnProgress.onprogress && xhr.upload) {
          xhr.upload.onprogress = xhrOnProgress.onprogress;
        }
        return xhr;
      }
    }
    var data = new FormData($('#mainForm')[0]); //要加【0】
    console.log(data);
    if(uploading){
      layer.alert("文件正在上传中,请稍候");
      return false;
    }
    $.ajax({
      type: 'POST',
      url: 'upload_file.php',  //当前路径
      data: data,
      dataType: 'json',
      processData: false,  //序列化,no
      contentType: false,  //不设置内容类型
      beforeSend: function(){
        uploading = true;
      },
      //进度条要调用原生xhr
      xhr:xhrOnProgress(function(evt){
        var percent = Math.floor(evt.loaded / evt.total*100);//计算百分比
        console.log(percent);
        // 设置进度条样式
        $('#jdt').css('width',percent * 3 + 'px');
        $('#jdt').css('background','skyblue');
        //显示进度百分比
        $('#jdt').text(percent+'%');
        $('#loaded').text(evt.loaded/1024 + 'K');
        $('#total').text(evt.total/1024 + 'K');
      }),
      success: function (data) {
        if (data.code == 200) {
          layer.msg(data.message, {icon: 1, time: 1000});
          //成功后关闭修改页
          setTimeout(function(){
            var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe的索引
            parent.layer.close(index);  //在执行关闭
          } ,2000);
          //还有刷新下iframe的界面
          parent.location.reload();
        } else {
          layer.msg(data.message, {icon: 2, time: 3000});
        }
        uploading = false;
      },
      error: function (data) {
        alert('服务异常,请稍后重试');
        console.log(data);
      }
    });
  }
</script>
</body>
</html>

php代码如下:

<?php
header('content-type:text/html;charset=utf-8');
if ($_FILES["file"]["error"] > 0)
{
 echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
 // 文件中文转码
 //iconv('utf-8', 'gbk', $_FILES["file"]["name"]);
  //取出后缀名
  $ext = strrchr($_FILES["file"]["name"],'.');
  move_uploaded_file($_FILES["file"]["tmp_name"],
   "upload/" . uniqid() . $ext);
  $arr['code'] = 666;
  $arr['message'] = "已经保存到: " . "upload/" . uniqid() . $ext;
  echo json_encode($arr);die;
}

参考资料: https://3water.com/article/94853.htm

希望本文所述对大家jQuery程序设计有所帮助。

jQuery 相关文章推荐
jQuery插件FusionCharts绘制ScrollColumn2D图效果示例【附demo源码下载】
Mar 22 jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
jQuery中库的引用方法
Jan 06 jQuery
jQuery基于Ajax实现读取XML数据功能示例
May 31 jQuery
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
使用jquery Ajax实现上传附件功能
Oct 23 jQuery
jQuery实现的简单日历组件定义与用法示例
Dec 24 jQuery
jQuery基于随机数解决中午吃什么去哪吃问题示例
Dec 29 jQuery
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
jQuery实现图片切换效果
Oct 19 jQuery
jQuery操作cookie的示例代码
Jun 05 #jQuery
jquery UI实现autocomplete在获取焦点时得到显示列表功能示例
Jun 04 #jQuery
javascript异步处理与Jquery deferred对象用法总结
Jun 04 #jQuery
一文快速了解JQuery中的AJAX
May 31 #jQuery
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 #jQuery
jQuery模拟html下拉多选框的原生实现方法示例
May 30 #jQuery
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 #jQuery
You might like
Pain 全世界最小最简单的PHP模板引擎 (普通版)
2011/10/23 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
2015/12/17 PHP
详解php中 === 的使用
2016/10/24 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
2019/10/15 PHP
把textarea中字符串里含有的回车换行替换成&amp;lt;br&amp;gt;的javascript代码
2007/04/20 Javascript
用dom+xhtml+css制作的一个相册效果代码打包下载
2008/01/24 Javascript
jQuery 位置插件
2008/12/25 Javascript
jQuery示例收集
2010/11/05 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
select标记美化--JS式插件、后期加载
2013/04/01 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
Node.js编码规范
2014/07/14 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
jquery实现焦点图片随机切换效果的方法
2015/03/12 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
CSS3属性box-shadow使用指南
2014/12/09 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
应聘医药代表职位求职信
2013/10/21 职场文书
共产党员公开承诺书
2014/03/25 职场文书
工作收入证明模板
2014/10/10 职场文书
企业党的群众路线教育实践活动学习心得体会
2014/10/31 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
世界文化遗产导游词
2015/02/13 职场文书
党支部评议意见
2015/06/02 职场文书
2016消防宣传标语口号
2015/12/26 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang
Redis可视化客户端小结
2021/06/10 Redis
SQL Server 中的事务介绍
2022/05/20 SQL Server