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 相关文章推荐
使用Jquery打造最佳用户体验的登录页面的实现代码
Jul 08 Javascript
jquery插件制作简单示例说明
Feb 03 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
js实现简单秒表走动的时钟特效
Mar 25 Javascript
Bootstrap的class样式小结
Dec 01 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
Jan 17 Javascript
JavaScript无阻塞加载和defer、async详解
Feb 26 Javascript
jQuery ajax请求struts action实现异步刷新
Apr 19 jQuery
Angularjs验证用户输入的字符串是否为日期时间
Jun 01 Javascript
vue 1.x 交互实现仿百度下拉列表示例
Oct 21 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
Feb 10 Javascript
一次让你了解全部JavaScript的作用域
Jun 24 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
mysql5详细安装教程
2007/01/15 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
php常用图片处理类
2016/03/16 PHP
thinkPHP的表达式查询用法详解
2016/09/14 PHP
PHP设计模式之命令模式示例详解
2020/12/20 PHP
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
JSON键值对序列化和反序列化解析
2017/01/24 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
详解vue跨组件通信的几种方法
2017/06/15 Javascript
jQuery自动或手动图片切换效果
2017/10/11 jQuery
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
vue 里面的 $forceUpdate() 强制实例重新渲染操作
2020/09/21 Javascript
[04:45]DOTA2-DPC中国联赛正赛 iG vs LBZS 赛后选手采访
2021/03/11 DOTA
在python中的socket模块使用代理实例
2014/05/29 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
基于pandas数据样本行列选取的方法
2018/04/20 Python
Python中的self用法详解
2019/08/06 Python
Python实现TCP通信的示例代码
2019/09/09 Python
python基于property()函数定义属性
2020/01/22 Python
对python中list的五种查找方法说明
2020/07/13 Python
美国专业汽车音响和移动电子产品零售商:Car Toys
2019/05/13 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
美国名牌手表折扣网站:Jomashop
2020/05/22 全球购物
证券期货行业个人的自我评价
2013/12/26 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
委托协议书范本
2014/04/22 职场文书
难忘的一课教学反思
2014/04/30 职场文书
孝敬父母的活动方案
2014/08/28 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
法制教育观后感
2015/06/17 职场文书
付款证明模板
2015/06/19 职场文书
致运动员加油稿
2015/07/21 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书