如何使用post的方法为iframe的页面iframe src传递参数数

父窗口和iframe子窗口之间相互传递参数和调用函数或方法(url中传参)【转载】
原文地址:/hmyprograming/archive//2640094.html
1.父窗口向子窗口传递参数:
可以在url中添加参数:2.html?a=1&b=2&c=3
& & 然后在子页面上可用js解析,提供一个函数:
function getQueryStr(sArgName)
var args = LocString.split("?");
var retval = "";
if(args[0] == LocString)
var str = args[1];
args = str.split("&");
for(var i = 0; i & args. i ++)
str = args[i];
var arg = str.split("=");
if(arg.length &= 1)
if(arg[0] == sArgName) retval = arg[1];
& & & 使用
var a=getQueryStr("a");
var b=getQueryStr("b");
var c=getQueryStr("c");
& &可以取得值
2.子页面向父页面传递参数:
&可以换一个思路也就是在父页面中定义一个变量,然后在子页面中进行访问更改。
& 访问方法:window.parent.父窗口中的变量=xxx;
3.父页面调用子窗口方法
&&iframe name="myFrame"
src="child.html"&&/iframe&&
&myFrame.window.functionName();&
4.子窗口调用父窗口方法
&&parent.functionName();&
下面父窗口和子窗口相互调用举例:
& &父窗口页面&
type="text/javascript"&&&
function say() {&
alert("parent.html------&I'm at
parent.html");&
function callChild()&
//document.frames("myFrame").f1();&
myFrame.window.say();&
&/script&&&
&body&&&&&
type=button&&
value="调用child.html中的函数say()"
onclick="callChild()"&&
&iframe name="myFrame"
src="child.html"&&/iframe&&
子窗口页面&
type="text/javascript"&&
function say()&&
alert("child.html---&I'm at
child.html");&&
function callParent() {&
parent.say();&
&/script&&&
type=button&&
value="调用parent.html中的say()函数"&&
onclick="callParent()"&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置:
→ jsp和action之间参数传递的四种方法
本类常用软件
下载量:584204
下载量:416902
下载量:366961
下载量:365699
下载量:325855
jsp和action之间参数传递的四种方法
22:13:31&&出处:&&&人气:2529次&&&&字号:&&&&
东坡下载 & 分享互联网 Copyright(C)
All Rights Reserved! 网站备案/许可证号:鄂ICP备号-1jsp页面中文参数传递get和post方法分析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
jsp页面中文参数传递get和post方法分析
阅读已结束,下载文档到电脑
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,方便使用
还剩3页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢本帖子已过去太久远了,不再提供回复功能。iframe实现跨域post请求的技术细节 - 简书
iframe实现跨域post请求的技术细节
在最近的一个项目中,我打算在页面上实现这样一个功能:
在网页上画出某种图形,上传到服务器后,返回一个src地址。这个地址可以用来分享到各种社交媒体。
这个功能看似非常简单,但要实现它还需要注意各种小的细节。
首先说下思路和技术要点:
用canvas来实现页面的画图功能,利用canvas的方法可以很方便地将画布的数据保存为。
用jQuery的ajax方法将图像数据异步提交到后台,在后台处理上传后,返回一个地址给前端调用。
按照这个思路马上就用实现了一个测试用例。但结果非常让人失望!下面就是我遇到的各种问题:
post OR get
首先是请求方式问题。
我们知道,http的get请求是利用url发送给服务器请求,受制于字节数限制,无法发送大的数据量。jquery中的get方法是其ajax方法的一个封装,基本原理仍是利用XMLHttpRequest对象发送了一个get请求,要发送图片这种较大的数据,用get方式显然力不从心,所以必须用post方式提交。
心想这么简单,于是把get改成post,over!
但结果失败了,因为这里遇到了另一个很严重的问题。
跨域提交(如果你是同域上传的话,这一段可以忽略了)
jQuery中的post方法在同域的情况下,可以顺利地以异步的方式提交form 数据,并用返回一个json结果。
所以,在同域的情况下,你可以这样
$.post("url",form1.serialize(),function(json){console.log(json)},'json');
服务器将处理后的结果用json形式返回给前端。
但在我的工作环境中,跨域是很常见的。而且我也希望能将这个功能组件化,让它在不同的子域中调用。
这样就必须要用到跨域的方式,于是很自然地想到jQuery中的jsonp。而且在jquery官方的方法文档中,写明了dataType的值可以是"jsonp"。
于是又去改了一通,点了该死的按钮以后返回的是""!God!
原来jQuery的post方法在跨域提交时会自动转换为GET方式,此时提交的数据已经超过了GET方式的请求字节限制!
这个时候,虽然有些气急败坏,但终于找到症结所在,就是下面要说的问题:
如何在跨域的情况下异步发送post请求?
这里要说明一个情况,就是为什么要用异步?
因为在我之前的许多项目中,大多都是在页面上发送一个异步请求,把服务器的结果实时地展示到页面上来,而不必刷新整个页面。当然会很自然地想到这样的实践方式。
我没有考虑到的是,之前的这些实践都是发送的get请求。当发送get请求时,如果是跨域,利用XMLHttpRequest对象发送get请求时可以用jsonp的方式跟服务器配合取回结果;如果是同域,那就更没有问题了。
但这次要上传图像数据,只能发送post请求,而且要异步实现。这可就犯难了。
好在守着互联网这个宝库,稍微搜索了一番以后,终于发现了一些有用的东西。
首先是这篇:
看了这个后,知道了异步的情况下是不能跨域发送post请求的。想想也是,你在自己的网站上随便form发送了一大段数据到别人的网站,人家不搭理你就不错了,还要人家给你返回个“哥俩好”,可能么?
安全很重要,但我自己的两个子域虽然是跨域,但总归是一家子。一家人怎么才能不说两家话呢?
来看这个:
文档中列举出了目前实现跨域请求很多方法,如CORS、invisible iframe、server proxy、flash proxy。
还有一些文章列出了HTML5 WebSocket方法,但这种方式目前还不是标准,或者还没有流行起来,要想让功能以比较稳定的方式运行,最好还是用当下主流的方式。于是决定用iframe来实现。
iframe实现跨域提交的原理
iframe进行post“跨域”无刷新提交原理
看了这个图以后,基本上思路就明晰了。
我们用异步的目的是实现无刷新,既然post不能跨域异步提交,并且不异步也可以无刷新,那我们就不异步。我把form提交到本页面的一个空iframe中,这样不会造成页面的刷新。让服务器处理完后跳转到同域下的upload_result网页里,并给这个网页的url附加处理的结果。这样原始请求页的空iframe就加载了服务器跳转的那个页面的内容。同时,虽然这个upload_result页虽然跟我的原始页面不在一个子域,但我可以人为地设置它们的document.domain为同一个父域,当这个upload_result页面在我的原始请求页加载时,就可以执行父页面的callback函数。
明白了基本的原理,剩下的就是体力活了,下面看看怎么构建这样一个机制。
首先在服务器端写好一个upload_result.html,里面用js解析出页面URL附带的信息。其中包括两个最重要的信息,服务器上传图片后的地址和原始页面请求的回调函数名
在服务器端写好upload脚本,处理前端post过来的数据,最重要的两个域对应地是文件信息(这里是二进制数据)和回调函数名称。当处理完成图片上传后,用header("Location: upload_result.html?paramString")跳转到upload_result页。其中paramString包含了url格式的图像地址和回调函数名称键值对。
需要注意的是,传给服务器端的数据是base64编码的,需要先解码才能保存。
前端页面需要构造的元素如下:
一个回调函数,比如upload_callback,此函数须能让iframe的页面中访问到。
一个空的iframe
一个隐藏的form。给这个form设置action为服务器处理地址,target为空iframe的name/id。再在这个form 中设置两个个隐藏的input:一个用来接收canvas图像数据,另一个用来接收页面的回调函数名。
这样,当用户在canvas画完图,点击upload按钮时,把canvas的信息和回调函数名赋值给form,触发form提交。结果返回给空iframe,iframe 解析自身的返回结果,并触发父页面的callback函数。于是实现了页面的无刷新跨域post提交。Good!
实现了canvas二进制图像的跨域上传和返回,那么在此基础上还可以做些更好玩的:比如图像编辑。
功能很简单:用户打开本地的图片文件并加载到canvas中,在画布上进行各种编辑,完了上传到服务器,并把返回的地址分享出去。
这里要用到的一个新东西就是HTML5的对象。利用它可以实现如本地预览等功能,我们用它来把选中的本地文件加载到canvas中,编辑后上传。
什么是跨域?跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。广义的跨域:1.) 资源跳转: A链接、重定向、表单提交2.) 资源嵌入:
、 、 、&frame&等dom标签,还有样式中background:url()、@font-face()等文...
@(JS技巧)[跨域]各种跨域方法详解总是在听说跨域,可是自己除了JSON,其它的方法其实并不是真的理解。今晚好好的研究一下各种跨域方法,并且争取把各种方法都弄明白。跨域:这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或...
由于浏览器的同源策略保护机制,浏览器不能执行来自其他来源的脚本。通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据的操作就叫跨域。 所谓同源,就是指协议、域名(IP)、端口三者都相同。只...
1. 什么是跨域?
跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议、域名、端口有任何一个不同,都被当作是不同的域。之所以会产生跨域这个问题呢,其实也很容易想明白,要是随便引用外部文件,不同标签下的页面引用类似的彼此的文件...
1. 什么是跨域?
跨域一词从字面意思看,就是跨域名嘛,但实际上跨域的范围绝对不止那么狭隘。具体概念如下:只要协议、域名、端口有任何一个不同,都被当作是不同的域。之所以会产生跨域这个问题呢,其实也很容易想明白,要是随便引用外部文件,不同标签下的页面引用类似的彼此的文件...
被好几个妹子案例了这部电影,打算去看一看。我是个怎么喜欢动物的人,只可远观或看图,不能近距离接触,因为害怕,更不用提饲养照顾小动物了。但我也绝非那种虐待动物的冷血之人,只是对生命抱有敬畏,保持一种相互独立、互不干涉的状态。 在我的家里,曾经出现过一对兔子,一对猫咪,和一对狗...
我和HY初见面成为同桌后了一段时间,他打死也不相信,我是个内向的小孩。期末,老师发张自我评价的纸,让我们自己写,以便老师方便写通知书上的评语。写评价嘛,自然写缺点和优点。我在缺点上狠狠的写上了(我有时候很内向)。然后同桌胡翼拿走我的纸刚看到这行,就对我大笑起来了。“你是个内...
制片人蓝天 (中国文联导演、制片人、资深策划人) 作品有: 昆明世博会《人与自然世纪之约》; 电视剧《妒忌》《欲望升级》《萨尔浒之战》; 北京奥运会《感动世界的中国品牌城市》等等。 近日,蓝天导演来道福建惠安传莲舍喝茶聊天,与惠安籍知名作家、书法家、艺术理论家和评论家吴伟平...
咱们先聊聊题外话,为什么说ajax目前还是应用非常广泛的呢在以后也是一个强大的通信工具?
目前市场分为CS: 客户端,服务端通信模式,俗话就是说在Android.IOS 复杂的客户端应用,如:要是咱们在路上想玩游戏的时候,看见要更新,重新安装就会直接放弃了; BS:...

我要回帖

更多关于 iframe页面接收参数 的文章

 

随机推荐