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 相关文章推荐
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
Jan 16 Javascript
JQuery 入门实例1
Jun 25 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
Jun 20 Javascript
js模拟点击以提交表单为例兼容主流浏览器
Nov 29 Javascript
使用firebug进行调试javascript的示例
Dec 16 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
Mar 12 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
基于Vue渲染与插件的加载顺序的问题详解
Mar 05 Javascript
详解Vue源码学习之callHook钩子函数
Jul 25 Javascript
一文了解Vue中的nextTick
May 06 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 Javascript
javascript实现倒计时提示框
Mar 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
PHP详细彻底学习Smarty
2008/03/27 PHP
php cli 方式 在crotab中运行解决
2010/02/08 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
PHP GD库生成图像的几个函数总结
2014/11/19 PHP
php实现读取和写入tab分割的文件
2015/06/01 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
2016/01/05 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
laradock环境docker-compose操作详解
2019/07/29 PHP
php设计模式之观察者模式实例详解【星际争霸游戏案例】
2020/03/30 PHP
基于jQuery选择器的整理集合
2013/04/26 Javascript
js控制input框只读实现示例
2014/01/20 Javascript
页面按钮禁用与解除禁用的方法
2014/02/19 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
属于你的jQuery提示框(Tip)插件
2016/01/20 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
javascript ASCII和Hex互转的实现方法
2016/12/27 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
CSS3结合jQuery实现动画效果及回调函数的实例
2017/12/27 jQuery
动态加载JavaScript文件的3种方式
2018/05/05 Javascript
vue配置多页面的实现方法
2018/05/22 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
深入理解Antd-Select组件的用法
2020/02/25 Javascript
Django框架中方法的访问和查找
2015/07/15 Python
python判断一个数是否能被另一个整数整除的实例
2018/12/12 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python处理自动化任务之同时批量修改word里面的内容的方法
2019/08/23 Python
在Python中使用filter去除列表中值为假及空字符串的例子
2019/11/18 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
2020/02/18 Python
纯CSS3实现扇形动画菜单(简化版)实例源码
2017/01/17 HTML / CSS
KIKO MILANO西班牙官网:意大利领先的化妆品和护肤品品牌
2019/05/03 全球购物
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
Python中递归以及递归遍历目录详解
2021/10/24 Python
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL
openstack云计算keystone组件工作介绍
2022/04/20 Servers