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 选择器引擎sizzle浅析
Feb 06 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
Aug 23 Javascript
Js 去掉字符串中的空格(实现代码)
Nov 19 Javascript
js实现的折叠导航示例
Nov 29 Javascript
Javascript基础教程之比较操作符
Jan 18 Javascript
javascript实现捕捉键盘上按下的键
May 05 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
Dec 11 Javascript
websocket+node.js实现实时聊天系统问题咨询
May 17 Javascript
js实现一个页面多个倒计时的3种方法
Feb 25 Javascript
Vue.js构建你的第一个包并在NPM上发布的方法步骤
May 01 Javascript
小程序中设置缓存过期的实现方法
Jan 14 Javascript
小程序分享链接onShareAppMessage的具体用法
May 22 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
php 数学运算验证码实现代码
2009/10/11 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
Javascript 网页黑白效果实现代码(兼容IE/FF等)
2010/04/23 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
jQuery实现的网格线绘制方法
2016/06/20 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
js获取指定字符前/后的字符串简单实例
2016/10/27 Javascript
基于wordpress的ajax写法详解
2018/01/02 Javascript
前端js中的事件循环eventloop机制详解
2019/05/15 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
JS实现简易计算器
2020/02/14 Javascript
ES6箭头函数和扩展实例分析
2020/05/23 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
Python使用filetype精确判断文件类型
2017/07/02 Python
使用Python更换外网IP的方法
2018/07/09 Python
在pandas多重索引multiIndex中选定指定索引的行方法
2018/11/16 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
函数只定义了一次, 调用了一次, 但编译器提示非法重定义了-什么问题?
2014/10/03 面试题
函授教育个人学习的自我评价
2013/12/31 职场文书
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
怎么写自荐书范文
2014/02/12 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
国庆庆典邀请函
2015/02/02 职场文书
个人年终总结范文
2015/03/09 职场文书
python实现简单的井字棋
2021/05/26 Python
Python实现生成bmp图像的方法
2021/06/13 Python
Python实现聚类K-means算法详解
2022/07/15 Python