使用Ajax实现无刷新上传文件


Posted in Javascript onApril 12, 2022

最终效果展示

使用Ajax实现无刷新上传文件

xhr发起请求

<!DOCTYPE html>
<html lang="en">
 
<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">
    <title>Document</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="external nofollow" >
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
 
<body>
    <!--1、文件选择框  -->
    <input type="file" id="file1">
    <!-- 2、上传文件的按钮 -->
    <button id="btnupload">上传文件</button>
    <br/>
    <div class="progress" style="width:300px;margin:5px;">
        <div class="progress-bar progress-bar-striped active" style="width: 0%;" id="precent">
            0%
        </div>
    </div>
    <!-- 3、img标签 来显示上传成功以后的图片 -->
    <img alt="" id="img" width="800">
 
    <script>
       var precent = document.querySelector('#precent')
        var btnupload = document.querySelector('#btnupload')
        btnupload.addEventListener('click', function() {
            var files = document.querySelector('#file1').files
            if (files.length <= 0) {
                return alert('请选择要上传的文件')
            }
 
            var fd = new FormData()
            fd.append('avatar', files[0])
            var xhr = new XMLHttpRequest()
 
            xhr.upload.onprogress = function(e) {
                console.log(e);
                if (e.lengthComputable) {
                    var h = Math.ceil((e.loaded / e.total) * 100)
                    precent.style.width = h + '%'
                    precent.innerHTML = h + '%'
                    console.log(h);
                }
            }
            xhr.upload.onload = function() {
                $('#precent').removeClass().addClass('progress-bar progress-bar-success')
            }
 
            xhr.open('post', 'http://www.liulongbin.top:3006/api/upload/avatar')
            xhr.send(fd)
            xhr.onreadystatechange = function() {
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var data = JSON.parse(xhr.responseText)
                    console.log(data);
                    if (data.status == 200) {
                        console.log('上传成功');
                        document.querySelector('#img').src = 'http://www.liulongbin.top:3006' + data.url
                    } else {
                        console.log('上传失败');
                    }
                }
            }
        })
    </script>
</body>
 
</html>

ajax发起请求

<!DOCTYPE html>
<html lang="en">
 
<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">
    <title>Document</title>
    <script src="jquery.js"></script>
    <style>
        img {
            width: 50px;
            height: 50px;
            display: none;
        }
    </style>
</head>
 
<body>
    <input type="file" id="file1">
    <button id="btnupload">上传文件</button>
    </br>
    <img src="5-121204193R5-50.gif" alt="" id="loading">
    <script>
        $(function() {
            $(document).ajaxStart(function() {
                $('#loading').show()
            })
            $(document).ajaxStop(function() {
                $('#loading').hide()
            })
            $('#btnupload').on('click', function() {
                var files = $('#file1')[0].files
                if (files.length <= 0) {
                    alert('请选择文件')
                }
                console.log('ok');
                var fd = new FormData()
                fd.append('avatar', files[0])
                $.ajax({
                    method: 'POST',
                    url: 'http://www.liulongbin.top:3006/api/upload/avatar',
                    data: fd,
                    processData: false,
                    contentType: false,
                    success: function(res) {
                        console.log(res);
                    }
                })
 
            })
 
        })
    </script>
</body>
 
</html>

到此这篇关于Ajax实现上传图像功能的示例详解的文章就介绍到这了!

Javascript 相关文章推荐
判断目标是否是window,document,和拥有tagName的Element的代码
May 31 Javascript
js数组Array sort方法使用深入分析
Feb 21 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
Apr 29 Javascript
javascript实现二级级联菜单的简单制作
Nov 19 Javascript
利用jquery去掉时光轴头尾部线条的方法实例
Jun 16 jQuery
20行JS代码实现网页刮刮乐效果
Jun 23 Javascript
es6新特性之 class 基本用法解析
May 05 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
Jan 27 jQuery
整理 node-sass 安装失败的原因及解决办法(小结)
Feb 19 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
vue选项卡切换的实现案例
分享一个vue实现的记事本功能案例
vue代码分块和懒加载非必要资源文件
Apr 11 #Vue.js
vue打包时去掉所有的console.log
三种方式清除vue路由跳转router-link的历史记录
Apr 10 #Vue.js
vue route新窗口跳转页面并且携带与接收参数
Apr 10 #Vue.js
You might like
Thinkphp中的curd应用实用要点
2015/01/04 PHP
破除一些网站复制、右键限制
2006/11/04 Javascript
jquery实现的让超出显示范围外的导航自动固定屏幕最顶上
2011/09/22 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
javascript中全局对象的isNaN()方法使用介绍
2013/12/19 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
原生js制作简单的数字键盘
2015/04/24 Javascript
深入理解angularjs过滤器
2016/05/25 Javascript
a标签置灰不可点击的实现方法
2017/02/06 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
node前端开发模板引擎Jade的入门
2018/05/11 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
React Native 混合开发多入口加载方式详解
2019/09/23 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
和孩子一起学习python之变量命名规则
2018/05/27 Python
python 正确保留多位小数的实例
2018/07/16 Python
面向对象学习之pygame坦克大战
2019/09/11 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
几个人围成一圈的问题
2013/09/26 面试题
结构和类有什么异同
2012/07/16 面试题
优秀士兵先进事迹
2014/02/06 职场文书
静心口服夜广告词
2014/03/20 职场文书
研究生毕业自我鉴定范文
2014/03/27 职场文书
寒假家长评语大全
2014/04/16 职场文书
通信工程求职信
2014/07/16 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS
HTML5中的DOCUMENT.VISIBILITYSTATE属性详解
2023/05/07 HTML / CSS