通过隐藏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 相关文章推荐
jQuery TextBox自动完成条
Jul 22 Javascript
javascript 自定义事件初探
Aug 21 Javascript
JavaScript Scoping and Hoisting 翻译
Jul 03 Javascript
Three.js源码阅读笔记(物体是如何组织的)
Dec 27 Javascript
jQuery打印图片pdf、txt示例代码
Jul 22 Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 Javascript
jQuery实现checkbox全选的方法
Jun 10 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
Sep 01 Javascript
详解Angular 4.x NgTemplateOutlet
May 24 Javascript
jQuery阻止事件冒泡实例分析
Jul 03 jQuery
基于ajax及jQuery实现局部刷新过程解析
Sep 12 jQuery
vue 判断页面是首次进入还是再次刷新的实例
Nov 05 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共享内存段示例分享
2014/01/20 PHP
分享下页面关键字抓取www.icbase.com站点代码(带asp.net参数的)
2014/01/30 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
php与c 实现按行读取文件实例代码
2017/01/03 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
2019/10/17 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
PHP7 其他修改
2021/03/09 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
javascript相关事件的几个概念
2015/05/21 Javascript
初步了解javascript面向对象
2015/11/09 Javascript
jQuery中trigger()与bind()用法分析
2015/12/18 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
JavaScript登录验证码的实现
2016/10/27 Javascript
详解springmvc 接收json对象的两种方式
2016/12/06 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
详解Immutable及 React 中实践
2018/03/01 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
python实现kMeans算法
2017/12/21 Python
python 检查文件mime类型的方法
2018/12/08 Python
详解Python3网络爬虫(二):利用urllib.urlopen向有道翻译发送数据获得翻译结果
2019/05/07 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
Python xlwings插入Excel图片的实现方法
2021/02/26 Python
大学生就业自我鉴定
2013/10/26 职场文书
质量工程师岗位职责
2013/11/16 职场文书
董事长助理岗位职责
2014/02/18 职场文书
党建工作汇报材料
2014/12/24 职场文书
煤矿安全生产工作总结
2015/08/13 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书
Redis批量生成数据的实现
2022/06/05 Redis