使用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中的string.format函数代码
Aug 11 Javascript
实现动画效果核心方式的js代码
Sep 27 Javascript
浅谈javascript构造函数与实例化对象
Jun 22 Javascript
每天一篇javascript学习小结(基础知识)
Nov 10 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
全面解析Bootstrap表单样式的使用
Sep 09 Javascript
解决Vue页面固定滚动位置的处理办法
Jul 13 Javascript
vue单页应用中如何使用jquery的方法示例
Jul 27 jQuery
vue 内置过滤器的使用总结(附加自定义过滤器)
Dec 11 Javascript
仿ElementUI实现一个Form表单的实现代码
Apr 23 Javascript
js+canvas实现刮刮奖功能
Sep 13 Javascript
解决vant title-active-color与title-inactive-color不生效问题
Nov 03 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
解析ajax事件的调用顺序
2013/06/17 PHP
ThinkPHP删除栏目(实现批量删除栏目)
2017/06/21 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
php pdo连接数据库操作示例
2019/11/18 PHP
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
js中的eval()函数把含有转义字符的字符串转换成Object对象的方法
2016/12/02 Javascript
vue实现单选和多选功能
2017/08/11 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
微信小程序实现简单表格
2019/02/14 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
layui switch 开关监听 弹出确定状态转换的例子
2019/09/21 Javascript
了不起的11个JavaScript代码重构最佳实践小结
2021/01/11 Javascript
在Python中使用pngquant压缩png图片的教程
2015/04/09 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Pyinstaller将py打包成exe的实例
2018/03/31 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
Python 保持登录状态进行接口测试的方法示例
2019/08/06 Python
pytorch numpy list类型之间的相互转换实例
2019/08/18 Python
django连接mysql数据库及建表操作实例详解
2019/12/10 Python
如何创建一个Flask项目并进行简单配置
2020/11/18 Python
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
美国男士西装打折店:Jos. A. Bank
2017/11/13 全球购物
您的时尚,您的生活方式:DTLR Villa
2019/12/25 全球购物
银行实习人员自我鉴定
2013/09/22 职场文书
优秀应届生推荐信
2013/11/09 职场文书
市场部岗位职责范本
2015/04/15 职场文书
活动经费申请报告
2015/05/15 职场文书
地震捐款简报
2015/07/21 职场文书
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL
Python破解极验滑动验证码详细步骤
2021/05/21 Python
Java移除无效括号的方法实现
2021/08/07 Java/Android