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 相关文章推荐
本地对象Array的原型扩展实现代码
Dec 04 Javascript
在Javascript里访问SharePoint列表数据的实现方法
May 22 Javascript
js中有关IE版本检测
Jan 04 Javascript
js播放wav文件(源码)
Apr 22 Javascript
如何让页面加载完成后执行js
Jun 26 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
javascript进行数组追加方法小结
Jun 16 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
基于对象合并功能的实现示例
Oct 10 Javascript
Three.js实现3D机房效果
Dec 30 Javascript
JS重学系列之聊聊new操作符
Mar 04 Javascript
策略模式实现 Vue 动态表单验证的方法
Sep 16 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
一个程序下载的管理程序(四)
2006/10/09 PHP
PHP脚本数据库功能详解(中)
2006/10/09 PHP
基于mysql的论坛(2)
2006/10/09 PHP
PHP中替换键名的简易方法示例详解
2014/01/07 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
php使用正则验证中文
2016/04/06 PHP
Yii2单元测试用法示例
2016/11/12 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
jQuery实现移动端Tab选项卡效果
2017/03/15 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
Vue 开发必须知道的36个技巧(小结)
2019/10/09 Javascript
Vuex modules模式下mapState/mapMutations的操作实例
2019/10/17 Javascript
JavaScript实现多球运动效果
2020/09/07 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
[01:01:01]完美世界DOTA2联赛循环赛 GXR vs FTD BO2第一场 10.29
2020/10/29 DOTA
深入理解Python中变量赋值的问题
2017/01/12 Python
python中cPickle类使用方法详解
2018/08/27 Python
python数据结构之线性表的顺序存储结构
2018/09/28 Python
Python3使用xlrd、xlwt处理Excel方法数据
2020/02/28 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
加拿大领先的优质厨具产品在线购物网站:Golda’s Kitchen
2017/11/17 全球购物
学生爱国演讲稿
2014/01/14 职场文书
人力资源作业细则
2014/03/03 职场文书
给校长的建议书500字
2014/05/15 职场文书
教师师德师风个人整改方案
2014/09/18 职场文书
领导党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
死亡诗社观后感
2015/06/05 职场文书
高三生物教学反思
2016/02/22 职场文书
80后创业总结的9条职场用人思想,记得收藏
2019/08/13 职场文书