JavaScript实现图片伪异步上传过程解析


Posted in Javascript onApril 10, 2020

实现逻辑

首先要知道, ajax无法发送带有文件的post请求所以,所以还是要用同步的方式,但是刷新的时候,我们不要在原来的页面刷新,去一个隐藏的iframe里面刷新,form表单中action正常填写处理文件上传的操作。紧着着的target填写一个隐藏的iframe。 这样表单提交之后,文件会被上传,被刷新页面为隐藏的iframe,因此用户看到的效果和ajax处理的效果是一样的。

dom结构

在这里有两个需要注意的地方,一是iframe是隐藏的,对用户不可见。二是form的target属性就是iframe的id属性,必须确保这个地方的一致,否则获取不到服务器的回传地址

<form action="#" method="post" enctype="multipart/form-data" target="hidden_frame" id='upload'>
<input type="file" name="pic" accept="image/gif;image/jpg;" />
</form>
<iframe style="display:none" name='hidden_frame' id="hidden_frame" style='display:none'></iframe>

图片预览

一般在图片上传之前,我们希望用户可以预览到上传之后的样子,这里有两种处理方式。一个是等图片上传成功之后,服务器返回图片的地址,将图片显示,由于中间的时间差很小,给用户一种错觉好像真的是在预览。第二种方式是在图片上传之前,获取input中的本地图片地址,然后显示,由于是显示本地的图片,所以没有时间差,实现真正的预览。简单的逻辑逻辑代码如下

$("#userHeadImg").change(function(event) {          
   var file = $(event.target)[0].files[0];
   var src = URL.createObjectURL(file);
   if(file){
    //表示获取到了图片
   }else{
    //表示点击了取消
   }
   //这里的src就是图片的地址,将它放在任意一个img标签的src属性里面   
});

开始上传

在onchange事件里面促发form的submit事件,上传图片

$("#upload").submit();

获取服务器回传的图片url

服务器将地址返回到iframe,iframe会被刷新。使用js监听iframe的onload,一旦有onload发生,就表示服务器回传了信息

var imgsrc=$(this).contents().find("pre").text();

增加上传文件类型限制

accept="image/gif;image/jpg;"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
多个$(document).ready()的执行顺序实例分析
Jul 26 Javascript
限制上传文件大小和格式的jQuery插件实例
Jan 24 Javascript
JavaScript数组的定义及数字操作技巧
Jun 06 Javascript
深入理解javascript中concat方法
Dec 12 Javascript
BOM之navigator对象和用户代理检测
Feb 10 Javascript
JavaScript函数参数的传递方式详解
Mar 06 Javascript
webpack踩坑之路图片的路径与打包
Sep 05 Javascript
vue-cli实现多页面多路由的示例代码
Jan 30 Javascript
spirngmvc js传递复杂json参数到controller的实例
Mar 29 Javascript
深入理解Vue nextTick 机制
Apr 28 Javascript
vue使用自定义事件的表单输入组件用法详解【日期组件与货币组件】
Jun 01 Javascript
JS检测浏览器开发者工具是否打开的方法详解
Oct 02 Javascript
Vue实现Layui的集成方法步骤
Apr 10 #Javascript
如何基于layui的laytpl实现数据绑定的示例代码
Apr 10 #Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
Apr 10 #Javascript
vue+vant使用图片预览功能ImagePreview的问题解决
Apr 10 #Javascript
JS实现省市县三级下拉联动
Apr 10 #Javascript
JavaScript实现简单的图片切换功能(实例代码)
Apr 10 #Javascript
TypeScript的安装、使用、自动编译的实现
Apr 10 #Javascript
You might like
Discuz 5.0 中读取纯真IP数据库函数分析
2007/03/16 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
2008/09/10 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
Eclipse PHPEclipse 配置的具体步骤
2017/08/08 PHP
PHP连接MySQL数据库操作代码实例解析
2020/07/11 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
如何实现动态删除javascript函数
2007/05/27 Javascript
获取当前网页document.url location.href区别总结
2008/05/10 Javascript
JS 控制非法字符的输入代码
2009/12/04 Javascript
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
JS判断当前日期是否大于某个日期的实现代码
2012/09/02 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
使用 Javascript 实现浏览器推送提醒功能的示例
2017/11/03 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
vue脚手架搭建项目的兼容性配置详解
2018/07/17 Javascript
微信小程序显示倒计时功能示例【测试可用】
2018/12/03 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
Vue请求java服务端并返回数据代码实例
2019/11/28 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
Python 在 VSCode 中使用 IPython Kernel 的方法详解
2020/09/05 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
init进程的作用
2015/08/20 面试题
跟单文员的岗位职责
2013/11/14 职场文书
中专生的个人自我评价
2013/12/11 职场文书
幼儿园儿童节活动主持词+串词大全
2014/03/21 职场文书
2014年团支部年度工作总结
2014/12/24 职场文书
大学生自我鉴定怎么写
2019/05/07 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
用position:sticky完美解决小程序吸顶问题的实现方法
2021/04/24 HTML / CSS