通过隐藏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学习笔记(十七)js 优化
Feb 04 Javascript
使用js修改客户端注册表的方法
Aug 09 Javascript
JQuery实现鼠标移动到图片上显示边框效果
Jan 09 Javascript
jqueryUI里拖拽排序示例分析
Feb 26 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
jquery自定义插件开发之window的实现过程
May 06 Javascript
微信小程序-详解数据缓存
Nov 24 Javascript
canvas实现粒子时钟效果
Feb 06 Javascript
seaJs使用心得之exports与module.exports的区别实例分析
Oct 13 Javascript
electron实现qq快捷登录的方法示例
Oct 22 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
May 23 Javascript
JavaScript实现京东快递单号查询
Nov 30 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将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
php基于闭包实现函数的自调用(递归)实例分析
2016/11/11 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
js arguments对象应用介绍
2012/11/28 Javascript
jQuery extend 的简单实例
2013/09/18 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
jQuery基于事件控制实现点击显示内容下拉效果
2017/03/07 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
Vue页面骨架屏的实现方法
2018/05/22 Javascript
在vue中使用回调函数,this调用无效的解决
2020/08/11 Javascript
Nest.js环境变量配置与序列化详解
2021/02/21 Javascript
python笔记(1) 关于我们应不应该继续学习python
2012/10/24 Python
python基础while循环及if判断的实例讲解
2017/08/25 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
2018/02/08 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
Python.append()与Python.expand()用法详解
2019/12/18 Python
CSS3属性 line-clamp控制文本行数的使用
2020/03/19 HTML / CSS
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
高分子材料个人求职信范文
2013/09/25 职场文书
岗位职责范本
2013/11/23 职场文书
银行演讲稿范文
2014/01/03 职场文书
自荐书范文范例
2014/02/13 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
干部考核工作总结2015
2015/07/24 职场文书
高中英语教学反思范文
2016/03/02 职场文书
解析高可用Redis服务架构分析与搭建方案
2021/06/20 Redis
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫