原文:http://geeksun.iteye.com/blog/1070607

需求:从S平台上传文件到R平台,上传成功后R平台返回给S平台一个值,S平台是在一个页面弹出的浮窗里上传文件,所以不能用直接用向R平台submit的方式提交,换用一种类AJAX方式实现,此处用了target的方式,是一种伪AJAX.

提交页面代码:

  1. <form name="form_add" method="post" action="b.action"  enctype="multipart/form-data" target="hidden_frame">
  2. <iframe name='hidden_frame' id="hidden_frame" style='display:none'></iframe>
  3. </form>
  4. <script type="text/javascript">
  5. function callback(msg){
  6. if(msg == 0){
  7. parent.$.nyroModalRemove();
  8. }
  9. }
  10. </script>

form提交到的target的hidden_frame,这样看不出来页面跳转,callback为一个回调函数,接受上传action传回的值,根据传回值执行相应的操作。

处理上传文件的action代码:

  1. response.setCharacterEncoding("UTF-8");
  2. response.setContentType("text/html");
  3. response.setHeader("Cache-Control", "no-cache");
  4. response.addHeader("Access-Control-Allow-Origin", "*");
  5. response.addHeader("Access-Control-Allow-Headers", "x-requested-with");
  6. response.addHeader("Location", callUrl + "?msg=" + result);
  7. response.sendRedirect(callUrl + "?msg=" + result);

callUrl为文件上传时提交的反调的callUrl,msg为回传的参数。

callUrl为S平台的deal_callback.html,和上传的页面在同一目标下,页面代码为:

  1. <script type="text/javascript">
  2. var rs = window.location.search.split('?').slice(1);
  3. window.parent.callback(rs.toString().split('=').slice(1));
  4. </script>

deal_callback.html是response跳转到的页面,里面就两行代码,跳转到deal_callback.html后,此页面调用上传页面的callback方法,将返回值传递过去,完成返回值的传递。

iframe无刷新跨域上传文件并获得返回值的更多相关文章

  1. iframe无刷新跨域上传文件并获取返回值

    通常我们会有一个统一的上传接口,这个接口会被其他的服务调用.如果出现不同域,还需要无刷新上传文件,并且获取返回值,这就有点麻烦了.比如,新浪微博启用了新域名www.weibo.com,但接口还是使用原 ...

  2. js跨域上传文件 iframe

    封装好的jq插件 (function () { var iframe = '<iframe name="jqUploadIframe" style="display ...

  3. Angular4 后台管理系统搭建(10) - 做一个通用的可跨域上传文件的组件

    写的很慢,不知不觉这是第十篇了.但是我其他事情太多,只能抽空写下.现在angular4或angular2流行的上传方式是ng2-file-upload.它的功能很强大.但是我没有配置成可以跨域上传的. ...

  4. form+iframe+file 页面无刷新上传文件并获取返回值

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. iframe无刷新跨域并获得返回值

    参考:http://geeksun.iteye.com/blog/1070607 /** * iframe跨域提交大数据 * @param action 跨域地址 * @param arr [ {na ...

  6. springmvc结合ajax实现跨域上传文件

    本方法的思路是:先在前端利用FileReader将图片转换成base64编码,然后将编码字符串形式传递到后台(前提是服务端设置了允许跨域),后端再把base64编码转换成图片. 前端代码: <! ...

  7. asp.net跨域上传文件

    前端: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" con ...

  8. POST方式跨域上传文件

    JSONP请求有限制: 第一,不能跳出两层, 第二,不支持POST. 往往解决跨域POST请求的方案是个"古老"方法, 请求同域下的iframe. 服务器端:  需要附加头信息: ...

  9. [javascript] ajaxfileupload.js 跨域上传文件

    原文地址: http://www.ueffort.com/jqueryajaxfileupload-js-duo-wen-jian-shang-chuan-chuan-zhi-kua-yu/ 跨域 这 ...

随机推荐

  1. Spring Framework简介

    作者关于此主题早期文章 Spring框架快速入门 起源 要谈Spring的历史,就要先谈J2EE.J2EE应用程序的广泛实现是在1999年和2000年开始的,它的出现带来了诸如事务管理之类的核心中间层 ...

  2. 【详解】换一个角度看Socket的数据读写

    前言 以前对IO.NIO还算了解,也写过Netty的项目.但是对底层的数据传递不是很了解,一直存有这方面的疑惑.但是由于有其他事情就被打断了.前阵子因为想要了解volatile关键字的原理,学习了下J ...

  3. Tomcat启动时项目重复加载的问题

    最近在项目开发测试的时候,发现Tomcat启动时项目重复加载,导致资源初始化两次的问题  导致该问题的原因: 如下图:在Eclipse中将Server Locations设置为“Use Tomcat ...

  4. js节流函数和js防止重复提交的N种方法

    应用情景 经典使用情景:js的一些事件,比如:onresize.scroll.mousemove.mousehover等: 还比如:手抖.手误.服务器没有响应之前的重复点击: 这些都是没有意义的,重复 ...

  5. 页面滚动显示或隐藏元素Headroom.js插件帮助你实现滚动效果

    Headroom.js 是什么? Headroom.js 是一个轻量级.高性能的JS小工具(不依赖任何工具库!),它能在页面滚动时做出响应.此页面顶部的导航条就是一个鲜活的案例,当页面向下滚动时,导航 ...

  6. libtorch初体验

    环境 Ubuntu -18.04.1, opencv3.4.0 ,  python 3.6,  cmake 3.5.0, pytorch 1.0. pytorch官网下载对应版本:https://py ...

  7. 自定义Fiddler插件一

    上个月自定义了一个Fiddler的插件,可以根据请求生成接口自动化测试的RF和Python代码,这样测试人员只需要手动操作页面用Fiddler抓取报文,就可以直接生成RF.Python代码,然后只需要 ...

  8. 如何为你的树莓派安装一个WIN10系统?(非iot)

    Windows10 ARM版,是的,这次并非IoT版,而是功能与PC一致的ARM版.需要注意的是,这个方法并非官方提供的,可用性上会有一些坑,热衷于尝试的玩家可以一试! 准备项目:树莓派3B以上型号, ...

  9. 使用Java解析XML

    一.解析的对象 <?xml version="1.0" encoding="UTF-8"?> <users> <user id=& ...

  10. 洛谷P4424 [HNOI/AHOI2018]寻宝游戏(思维题)

    题意 题目链接 Sol 神仙题Orz Orz zbq爆搜70.. 考虑"与"和"或"的性质 \(0 \& 0 = 0, 1 \& 0 = 0\) ...