使用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的常见兼容问题及相关解决方法(chrome/IE/firefox)
Dec 31 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
JS简单模拟触发按钮点击功能的方法
Nov 30 Javascript
js剪切板应用clipboardData实例解析
May 29 Javascript
AngularJS入门之动画
Jul 27 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
Oct 19 Javascript
8 行 Node.js 代码实现代理服务器
Dec 05 Javascript
Vue学习笔记之表单输入控件绑定
Sep 05 Javascript
React Native实现地址挑选器功能
Oct 24 Javascript
JS实现的哈夫曼编码示例【原始版与修改版】
Apr 22 Javascript
vue二级菜单导航点击选中事件的方法
Sep 12 Javascript
ReactRouter的实现方法
Jan 25 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 和 XML: 使用expat函数(二)
2006/10/09 PHP
PHP5.2下chunk_split()函数整数溢出漏洞 分析
2007/06/06 PHP
用PHP读取RSS feed的代码
2008/08/01 PHP
php验证session无效的解决方法
2014/11/04 PHP
网页自动跳转代码收集
2009/09/27 Javascript
表格单元格交错着色实现思路及代码
2013/04/01 Javascript
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
JavaScript中实现PHP的打乱数组函数shuffle实例
2014/10/11 Javascript
Node.js中的模块机制学习笔记
2014/11/04 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
jQuery实现在最后一个元素之前插入新元素的方法
2015/07/18 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
Javascript中 带名 匿名 箭头函数的重要区别(推荐)
2017/01/29 Javascript
H5基于iScroll实现下拉刷新和上拉加载更多
2017/07/18 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
JavaScript轮播停留效果的实现思路
2018/05/24 Javascript
微信JS-SDK实现微信会员卡功能(给用户微信卡包里发送会员卡)
2019/07/25 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
JS获取当前时间的年月日时分秒及时间的格式化的方法
2019/12/18 Javascript
Python的Django框架中forms表单类的使用方法详解
2016/06/21 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
python urllib爬虫模块使用解析
2019/09/05 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
详解在python操作数据库中游标的使用方法
2019/11/12 Python
python上selenium的弹框操作实现
2020/07/13 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
党的群众路线教育实践活动整改方案
2014/10/28 职场文书
民事起诉书范本
2015/05/19 职场文书
入党积极分子群众意见
2015/06/01 职场文书
宪法宣传标语100条
2019/10/15 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
Python自动化测试PO模型封装过程详解
2021/06/22 Python