通过隐藏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 相关文章推荐
Javascript !!的作用
Dec 04 Javascript
jquery实现上下左右滑动的方法
Feb 09 Javascript
微信小程序 教程之小程序配置
Oct 17 Javascript
bootstrap datetimepicker 日期插件在火狐下出现一条报错信息的原因分析及解决办法
Mar 08 Javascript
javascript 日期相减-在线教程(附代码)
Aug 17 Javascript
实例讲解JavaScript预编译流程
Jan 24 Javascript
JS字符串常用操作方法实例小结
Jun 24 Javascript
vue.js实现只能输入数字的输入框
Oct 19 Javascript
如何使用vue slot创建一个模态框的实例代码
May 24 Javascript
js实现双人五子棋小游戏
May 28 Javascript
解决VUEX的mapState/...mapState等取值问题
Jul 24 Javascript
利用JS判断元素是否为数组的方法示例
Jan 08 Javascript
原生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 session机制
2011/07/17 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
yii2-GridView在开发中常用的功能及技巧总结
2017/01/07 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
jquery 最简单易用的表单验证插件
2010/02/27 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
js中点击空白区域时文本框与隐藏层的显示与影藏问题
2013/08/26 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
分享几种比较简单实用的JavaScript tabel切换
2015/12/31 Javascript
Node.js中防止错误导致的进程阻塞的方法
2016/08/11 Javascript
vue.js组件vue-waterfall-easy实现瀑布流效果
2017/08/22 Javascript
浅析Vue实例以及生命周期
2018/08/14 Javascript
react项目如何使用iconfont的方法步骤
2019/03/13 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
vue-cli3使用 DllPlugin 实现预编译提升构建速度
2019/04/24 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
利用Python如何批量更新服务器文件
2018/07/29 Python
python用BeautifulSoup库简单爬虫实例分析
2018/07/30 Python
python3.6环境安装+pip环境配置教程图文详解
2019/06/20 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
详解HTML5中表单验证的8种方法介绍
2016/12/19 HTML / CSS
最好的商品表达自己:Cafepress
2019/09/04 全球购物
大一自我鉴定范文
2013/10/04 职场文书
办公室年终个人自我评价
2013/10/28 职场文书
公积金转移接收函
2014/01/11 职场文书
写求职信要注意什么问题
2014/04/12 职场文书
庆国庆活动总结
2014/08/28 职场文书
节约用电倡议书
2015/04/28 职场文书
地雷战观后感
2015/06/09 职场文书
感恩主题班会教案
2015/08/12 职场文书
SQLServer2008提示评估期已过解决方案
2021/04/12 SQL Server