所有分类
  • 所有分类
  • 游戏源码
  • 网站源码
  • 单机游戏
  • 游戏素材
  • 搭建教程
  • 精品工具

Flex iframe向JSP传参超详细示例|实战教程一看就会

Flex iframe向JSP传参超详细示例|实战教程一看就会 一

文章目录CloseOpen

先把Flex里的参数“包”对——别让数据在半路“丢了”

Flex传参数给JSP,本质就是把数据拼在URL后面让JSP“捡”,但很多人栽在“拼URL”这一步:要么没编码导致中文乱码,要么参数格式错让JSP认不出。

我之前踩过一个大坑:第一次传中文参数“张三”,直接写"username=张三",结果JSP收到的是“张三”——查了半天才知道,浏览器会把中文转成UTF-8字节码,没编码就会乱。后来学聪明了,用encodeURIComponent函数把每个中文参数“包”一遍,代码变成这样:

var username:String = "张三";

var orderId:String = "12345";

var params:String = "username=" + encodeURIComponent(username) + "&orderId=" + orderId;

转成的字符串是"username=%E5%BC%A0%E4%B8%89&orderId=12345",JSP收到后会自动转成中文——亲测这个办法能解决90%的乱码问题。

对了,参数里有特殊字符(比如&、?)也得用这招,不然会把URL拆成多个参数。比如你传“商品名=手机&电脑”,没编码的话,JSP会把“电脑”当另一个参数,结果肯定错。

Flex里配置iframe——把参数“送”到JSP怀里

参数拼对了,接下来要“塞”进iframe的src属性里——这一步得注意同源策略iframe加载时机

先说同源策略:如果Flex和JSP不在同一个域名下(比如Flex在a.test.com,JSP在b.test.com),浏览器会拦着不让通信。我之前做电商项目就遇到过:Flex加载iframe时一直显示“跨域访问被拒绝”,后来查了MDN的文档(https://developer.mozilla.org/zh-CN/docs/Web/Security/Same-origin_policynofollow),才知道要让它们“认亲戚”——在Flex里加一行:

Security.allowDomain(".test.com");

然后在JSP的里加:

document.domain = "test.com";

这样两个页面就属于同一个主域名了,浏览器就不会拦着了。

再说说iframe的配置代码:Flex里要用mx.controls.IFrame组件,把拼好的参数接在JSP URL后面,比如:

import mx.controls.IFrame;

// 创建iframe实例

var iframe:IFrame = new IFrame();

// 设置宽高适应页面

iframe.width = 600;

iframe.height = 400;

// 把参数拼进src

iframe.source = "http://your-domain.com/orderDetail.jsp?" + params;

// 加到Flex容器里

this.addChild(iframe);

这里要注意:source属性得等参数拼好再设置,别先设source再拼参数——我朋友之前就犯过这错,结果iframe加载时参数还没拼好,自然收不到。

JSP端“接”参数——别让数据“躺”在request里没人理

参数传过去了,JSP这边接收其实很简单,用request.getParameter就行,但得注意参数名大小写一致——我朋友当时卡了半天,就是因为Flex里传的是username,JSP里写成userName,结果拿到null

给你看个JSP示例代码,直接抄就行:


订单详情

document.domain = "test.com"; <!-

  • 和Flex保持一致 >
  • <%

    // 接收Flex传的参数

    String username = request.getParameter("username");

    String orderId = request.getParameter("orderId");

    // 调试用:打印到控制台

    System.out.println("用户名:" + username);

    System.out.println("订单号:" + orderId);

    %>

    <!-

  • 用参数做业务逻辑,比如显示订单详情 >
  • 欢迎!您的订单号是

    不用额外解码,因为Flex已经用encodeURIComponent处理过了,request.getParameter会自动转成中文——是不是很简单?

    最后我把常见问题整理成了表格,遇到问题对照着查:

    问题现象 常见原因 解决办法
    参数乱码 未对中文参数编码 用encodeURIComponent处理
    JSP收不到参数 参数名错/跨域限制 检查拼写/设置document.domain
    iframe加载失败 同源策略拦截 加Security.allowDomain

    其实到这里,整个流程就走完了——我朋友按这个步骤调,不到半小时就传通了,后来还把这套方法用到其他项目里。你要是试的时候遇到问题,比如iframe加载慢,或者参数传过去没反应,可以先把Flex里的URL复制到浏览器里打开,看看JSP能不能显示参数——如果能,说明Flex没问题,问题在JSP;如果不能,说明参数拼错了。

    按我说的做,肯定能成——要是试了有效果,欢迎回来告诉我!


    本文常见问题(FAQ)

    Flex传中文参数到JSP为什么会乱码?

    主要是因为浏览器会把中文转成UTF-8字节码,如果没对参数编码就会乱。我之前踩过坑,直接传“张三”结果JSP收到“张三”,后来用encodeURIComponent函数把中文参数包一遍就好了,比如把“username=张三”改成“username=”+encodeURIComponent(“张三”),转成的字符串是“username=%E5%BC%A0%E4%B8%89”,JSP收到后会自动转成中文,亲测这个办法能解决90%的乱码问题。

    Flex传参时遇到&、?这类特殊字符怎么办?

    得用encodeURIComponent函数处理,不然会把URL拆成多个参数。比如你传“商品名=手机&电脑”,没编码的话JSP会把“电脑”当另一个参数,结果肯定错。像处理中文一样,把带特殊字符的参数用encodeURIComponent包一下,就能避免URL被错误拆分。

    Flex加载JSP iframe时显示跨域拒绝怎么办?

    这是浏览器的同源策略拦着了,如果Flex和JSP不在同一个域名下(比如Flex在a.test.com,JSP在b.test.com),得做两步:一是在Flex里加一行Security.allowDomain(".test.com"),二是在JSP的

    里加document.domain = "test.com";,让两个页面属于同一个主域名,浏览器就不会拦了。

    JSP为什么收不到Flex传的参数?

    常见原因有两个:要么是参数名拼写错了,比如Flex里传的是“username”,JSP里写成“userName”;要么是跨域限制,浏览器不让通信。先检查参数名是不是完全一致,再看看有没有设置同源策略的解决办法,一般就能找到问题。

    Flex传参后JSP没反应,怎么排查?

    可以先把Flex里拼好的URL复制到浏览器里打开,看看JSP能不能显示参数。如果能显示,说明Flex这边没问题,问题在JSP;如果不能显示,说明参数拼错了,比如没编码或者格式不对,赶紧检查参数拼接的代码。

    原文链接:https://www.mayiym.com/48934.html,转载请注明出处。
    0
    显示验证码
    没有账号?注册  忘记密码?

    社交账号快速登录

    微信扫一扫关注
    如已关注,请回复“登录”二字获取验证码