使用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 相关文章推荐
JS查看对象功能代码
Apr 25 Javascript
jquery延迟加载外部js实现代码
Jan 11 Javascript
jQuery中json对象的复制方式介绍(数组及对象)
Jun 08 Javascript
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
一个JavaScript防止表单重复提交的实例
Oct 21 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
Oct 21 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
Sep 13 Javascript
JS+Canvas实现的俄罗斯方块游戏完整实例
Dec 12 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
Dec 21 Javascript
vue2过滤器模糊查询方法
Sep 16 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
Dec 22 jQuery
element-ui点击查看大图的方法示例
Dec 14 Javascript
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
php strnatcmp()函数的用法总结
2013/11/27 PHP
一些常用的JS功能函数(2009-06-04更新)
2009/06/04 Javascript
javascript 获取url参数和script标签中获取url参数函数代码
2010/01/22 Javascript
javascript真的不难-回顾一下基础知识
2013/01/15 Javascript
js中replace的用法总结
2013/12/27 Javascript
javascript每日必学之循环
2016/02/19 Javascript
酷炫jQuery全屏3D焦点图动画效果
2016/03/22 Javascript
Bootstrap下拉菜单效果实例代码分享
2016/06/30 Javascript
Windows系统下安装Node.js的步骤图文详解
2016/11/15 Javascript
基于JavaScript实现报警器提示音效果
2017/10/27 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
详解vue-router数据加载与缓存使用总结
2018/10/29 Javascript
js逆向解密之网络爬虫
2019/05/30 Javascript
vue 使用async写数字动态加载效果案例
2020/07/18 Javascript
Vue 构造选项 - 进阶使用说明
2020/08/14 Javascript
ES6学习教程之Promise用法详解
2020/11/22 Javascript
python写的一个squid访问日志分析的小程序
2014/09/17 Python
简单介绍Python中的floor()方法
2015/05/15 Python
详解Python中find()方法的使用
2015/05/18 Python
Python实现处理逆波兰表达式示例
2018/07/30 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
Python 切分数组实例解析
2019/11/07 Python
Python命令行click参数用法解析
2019/12/19 Python
python判断变量是否为int、字符串、列表、元组、字典的方法详解
2020/02/13 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
专业实习自我鉴定
2013/10/29 职场文书
机关门卫岗位职责
2013/12/30 职场文书
打架检讨书100字
2014/01/08 职场文书
劳动模范事迹材料
2014/01/19 职场文书
初中教师个人总结
2015/02/10 职场文书
2016简历自荐信优秀范文
2016/01/29 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
Java常用函数式接口总结
2021/06/29 Java/Android
Win11 BitLocker 驱动器加密
2022/04/19 数码科技