使用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 相关文章推荐
基于jquery的滚动条滚动固定div(附演示下载)
Oct 29 Javascript
jQuery ui插件的使用方法代码实例
May 08 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
Oct 16 Javascript
JavaScript判断是否为数字的4种方法及效率比较
Apr 01 Javascript
jquery实现动态改变div宽度和高度
May 08 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
Jul 09 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
Vue登录注册并保持登录状态的方法
Aug 17 Javascript
示例vue 的keep-alive缓存功能的实现
Dec 13 Javascript
JS使用栈判断给定字符串是否是回文算法示例
Mar 04 Javascript
vue移动端写的拖拽功能示例代码
Sep 09 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
第九节 绑定 [9]
2006/10/09 PHP
无JS,完全php面向过程数据分页实现代码
2012/08/27 PHP
WordPress用户登录框密码的隐藏与部分显示技巧
2015/12/31 PHP
CodeIgniter配置之config.php用法实例分析
2016/01/19 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
javascript 鼠标拖动图标技术
2010/02/07 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
判断滚动条到底部的JS代码
2013/11/04 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
js实现类似MSN提示的页面效果代码分享
2015/08/24 Javascript
Bootstrap基本组件学习笔记之面板(14)
2016/12/08 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
详解element-ui中表单验证的三种方式
2019/09/18 Javascript
[14:56]教你分分钟做大人:巫医
2014/10/30 DOTA
理解Python中的With语句
2015/02/02 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
实例介绍Python中整型
2019/02/11 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
python scipy卷积运算的实现方法
2019/09/16 Python
Python自动化测试笔试面试题精选
2020/03/12 Python
Python判断远程服务器上Excel文件是否被人打开的方法
2020/07/13 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
来自圣地亚哥的实惠太阳镜:Knockaround
2018/08/27 全球购物
斯洛伐克家具和时尚装饰品购物网站:Butlers.sk
2019/09/08 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
幼儿园消防安全制度
2014/01/26 职场文书
党的群众路线教育实践活动动员会主持词
2014/03/20 职场文书
电大毕业生自我鉴定
2014/04/10 职场文书
大学专科自荐信
2014/06/17 职场文书
一个都不能少观后感
2015/06/04 职场文书
关于CentOS 8 搭建MongoDB4.4分片集群的问题
2021/10/24 MongoDB
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
win10搭建配置ftp服务器的方法
2022/08/05 Servers