使用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 相关文章推荐
javascript 触发事件列表 比较不错
Sep 03 Javascript
jQuery.get、jQuery.getJSON、jQuery.post无法返回JSON问题的解决方法
Jul 28 Javascript
javascript与cookie 的问题详解
Nov 11 Javascript
JS长整型精度问题实例分析
Jan 13 Javascript
JS模拟Dialog弹出浮动框效果代码
Oct 16 Javascript
JS动态给对象添加事件的简单方法
Jul 19 Javascript
在web中js实现类似excel的表格控件
Sep 01 Javascript
微信小程序 animation API详解及实例代码
Oct 08 Javascript
分分钟学会vue中vuex的应用(入门教程)
Sep 14 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
Apr 17 Javascript
详解mpvue开发微信小程序基础知识
Sep 23 Javascript
JS实现百度搜索框关键字推荐
Feb 17 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的类 功能齐全的发送邮件类
2006/10/09 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
2016/03/18 PHP
浅谈PHP的反射API
2017/02/26 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
jquery 插件开发方法小结
2009/10/23 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
jquery如何通过name名称获取当前name的value值
2013/12/20 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
深入浅析javascript继承体系
2017/10/23 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
vue中的watch监听数据变化及watch中各属性的详解
2018/09/11 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
vue计算属性get和set用法示例
2019/02/08 Javascript
Vue实现搜索结果高亮显示关键字
2019/05/28 Javascript
EasyUI 数据表格datagrid列自适应内容宽度的实现
2019/07/18 Javascript
[01:14]2014DOTA2展望TI 剑指西雅图newbee战队专访
2014/06/30 DOTA
python对url格式解析的方法
2015/05/13 Python
django实现分页的方法
2015/05/26 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
python opencv将图片转为灰度图的方法示例
2019/07/31 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
django inspectdb 操作已有数据库数据的使用步骤
2021/02/07 Python
Hotels.com印度:酒店预订
2019/05/11 全球购物
Liu Jo西班牙官网:意大利服装品牌
2019/09/11 全球购物
No7 Beauty美国官网:英国国民护肤品牌
2019/10/31 全球购物
年度献血先进个人事迹材料
2014/02/14 职场文书
教师产假请假条范文
2014/04/10 职场文书
学校节能减排方案
2014/06/13 职场文书
受资助学生感谢信
2015/01/21 职场文书
《生物入侵者》教学反思
2016/02/16 职场文书
一次项目中Thinkphp绕过禁用函数的实战记录
2021/11/17 PHP
Python实现制作销售数据可视化看板详解
2021/11/27 Python
mysql使用 not int 子查询隐含陷阱
2022/04/12 MySQL