通过隐藏iframe实现无刷新上传文件操作


Posted in Javascript onMarch 16, 2016

其实在ajax出现之前,web应用也可以是无刷新的,那时大多通过IFrame来做到这一点。当然Ajax出现之后,人们一窝蜂地投奔Ajax 的阵营了,iFrame 就乏人问津了。但是用iFrame来实现无刷新上传文件确实一个很好的选择。

解决办法是通过一个隐藏的iframe来处理上传操作我采用的是ReactJS,amazeui,nodejs

1.html target指向iframe的name,就是把上传后的操作交给iframe来处理.

<form id="supplyformFile" name="formFile" method="post" target="frameFile"
encType="multipart/form-data">
<div className="am-form-file">
<button type="button" className="am-btn am-btn-default am-btn-sm">
<i className="am-icon-cloud-upload"></i> 选择要上传的文件
</button>
<input type="file" id="fileUp" onChange={this.UploadSupplyer} name="fileUp" />
</div> 
<div id="supplyfile_div"></div>
</form>
<iframe id="frameFile" name="frameFile" style={{display: 'none'}}></iframe>
<input type="hidden" id="supplyfile" />

2.JS处理当文件选择后提交form

UploadSupplyer:function(){
var path = document.all.fileUp.value;
if(!path){return false;}
$('.loadinfo').html('<p>文件上传中...</p>').removeClass("none");
$('#supplyformFile').submit();
},

3.nodejs服务器处理,因为处理页面是nodejs服务器域,iframe中存在跨域的问题,所以需要用到H5的postMessage方法来传递参数给iframe外面的表单页面

var fname = req.files.fileUp.path.replace("publicfiles", "").replace("public/files/", "");
res.writeHead(200, {'Content-type' : 'text/html'});
res.write('<script>');
res.write('window.parent.postMessage("'+fname+'","*");');
res.end('</script>');

4.JS处理上传结果

window.addEventListener('message',function(e){
var fname=e.data;
$('#supplyfile').val(fname);
$(".loadinfo").addClass("none");
$(".successinfo").html("<p>文件上传成功</p>").removeClass("none");
setTimeout(function() { $(".successinfo").addClass("none");}, 2000);
$("#supplyfile_div").html('<span class="am-icon-file-o"></span> <a target="_blank" href="'+hosts+'/files/'+fname+'">供应商确认单</a>');
},false);

以上所述是小编给大家介绍的通过隐藏iframe实现无刷新上传文件操作,希望对大家有所帮助!

Javascript 相关文章推荐
文本框文本自动补全效果示例分享
Jan 19 Javascript
js文件Cookie存取值示例代码
Feb 20 Javascript
Javascript玩转继承(三)
May 08 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
Jun 07 Javascript
angular 动态组件类型详解(四种组件类型)
Feb 22 Javascript
jQuery插件Echarts实现的渐变色柱状图
Mar 23 jQuery
javascript作用域链与执行环境详解
Mar 25 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
vue 中滚动条始终定位在底部的方法
Sep 03 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
Feb 17 Javascript
js常用正则表达式集锦
May 17 Javascript
jquery获取input输入框中的值
Nov 13 jQuery
原生JS实现平滑回到顶部组件
Mar 16 #Javascript
基于jquery实现百度新闻导航菜单滑动动画
Mar 15 #Javascript
dedecms页面如何获取会员状态的实例代码
Mar 15 #Javascript
JavaScript隐式类型转换
Mar 15 #Javascript
JavaScript正则表达式匹配 div  style标签
Mar 15 #Javascript
Angularjs整合微信UI(weui)
Mar 15 #Javascript
一步步教大家编写酷炫的导航栏js+css实现
Mar 14 #Javascript
You might like
PHP文件打开、关闭、写入的判断与执行代码
2011/05/24 PHP
超级实用的7个PHP代码片段分享
2012/01/05 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
判断浏览器的内核及版本号方法汇总
2015/01/05 Javascript
浅谈javascript获取元素transform参数
2015/07/24 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
jquery分隔Url的param方法(推荐)
2016/05/25 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
Vue.js如何优雅的进行form validation
2017/04/07 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
微信公众号H5支付接口调用方法
2019/01/10 Javascript
vue实现百度语音合成的实例讲解
2019/10/14 Javascript
js实现简单点赞操作
2020/03/17 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[52:12]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
python计算最大优先级队列实例
2013/12/18 Python
python如何使用unittest测试接口
2018/04/04 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
python实现蒙特卡罗方法教程
2019/01/28 Python
python程序快速缩进多行代码方法总结
2019/06/23 Python
解决python-docx打包之后找不到default.docx的问题
2020/02/13 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
python 实现控制鼠标键盘
2020/11/27 Python
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
如何删除一个表里面的重复行
2013/07/13 面试题
C#实现对任一张表的数据进行增,删,改,查要求,运用Webservice,体现出三层架构
2014/07/11 面试题
社区党员先进事迹
2014/01/22 职场文书
双拥工作宣传标语
2014/06/26 职场文书
2014年客服工作总结与计划
2014/12/09 职场文书
人才市场接收函
2015/01/30 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js