通过隐藏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的ajax功能实现的RSS Reader 代码
Sep 03 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
May 23 Javascript
input链接页面、打开新网页等等的具体实现
Dec 30 Javascript
JavaScript实现的浮动层框架用法实例分析
Oct 10 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
Oct 15 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
Angularjs 1.3 中的$parse实例代码
Sep 14 Javascript
薪资那么高的Web前端必看书单
Oct 13 Javascript
微信小程序实现的涂鸦功能示例【附源码下载】
Jan 12 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
Sep 16 Javascript
JS异步宏队列微队列原理详解
Sep 09 Javascript
vue3.0中友好使用antdv示例详解
Jan 05 Vue.js
原生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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
浅谈PHP无限极分类原理
2019/03/14 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
jquery等宽输出文字插件使用介绍
2013/09/18 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
jquery Ajax 实现加载数据前动画效果的示例代码
2014/02/07 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
extjs每个组件要设置唯一的ID否则会出错
2014/06/15 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
jQuery添加和删除指定标签的方法
2015/12/16 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
JavaScript中的各种操作符使用总结
2016/05/26 Javascript
jQuery使用$获取对象后检查该对象是否存在的实现方法
2016/09/04 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
AngularJS+Bootstrap实现多文件上传与管理
2016/11/08 Javascript
通过AngularJS实现图片上传及缩略图展示示例
2017/01/03 Javascript
JS去掉字符串前后空格或去掉所有空格的用法
2017/03/25 Javascript
Vue导出json数据到Excel电子表格的示例
2017/12/04 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
vue实现图书管理系统
2020/12/29 Vue.js
原生JavaScript实现轮播图
2021/01/10 Javascript
在Python中处理XML的教程
2015/04/29 Python
python3.5使用tkinter制作记事本
2016/06/20 Python
解决python3在anaconda下安装caffe失败的问题
2017/06/15 Python
python求最大值,不使用内置函数的实现方法
2019/07/09 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python实现微信打飞机游戏
2020/03/24 Python
Monnier Freres中文官网:法国领先的奢侈品配饰在线零售商
2017/11/01 全球购物
阿拉伯书店:Jamalon
2019/07/24 全球购物
美国办公用品折扣网站:Shoplet.com
2019/11/24 全球购物
服务承诺书格式
2014/05/21 职场文书
专题组织生活会发言材料
2014/10/17 职场文书
win10如何快速切换窗口 win10切换窗口快捷键分享
2022/07/23 数码科技