专栏首页菩提树下的杨过Flash/Flex学习笔记(4):如何打开网页及Get/Post数据

Flash/Flex学习笔记(4):如何打开网页及Get/Post数据

flash终究只是客户端技术,所以很多时候还是需要与服务端技术(比如asp,asp.net,jsp,php之类)进行数据交互的,下面的代码演示了如何在flash中打开网页,以及用GET/POST二种方式向服务端发送数据

//按下按钮,打开网页
btnOpen.addEventListener(MouseEvent.CLICK,
 function(){
 navigateToURL(new URLRequest("http://www.g.cn/search?hl=zh-CN&q=" + encodeURIComponent(txtId.text)),"_blank");
});

//以Get方式发送数据(发送就完事,不会理会服务端是否响应)
btnSend.addEventListener(MouseEvent.CLICK,
 function(){
 sendToURL(new URLRequest("/default.aspx?q=" + encodeURIComponent(txtId.text)));
});
btnPost.addEventListener(MouseEvent.CLICK,fnPostData);

//以Post方式发送数据(同样:发送就完事,不会理会服务端是否响应)
function fnPostData(e:MouseEvent) {
 var _urlReq:URLRequest = new URLRequest();
 _urlReq.url = "/default.aspx";
 _urlReq.method = URLRequestMethod.POST;
 var _data:URLVariables = new URLVariables();
 _data.q = "菩提树下的杨过"; //即传递 q = 菩提树下的杨过,注:经测试,Flash会自动对传递的数据做encodeURIComponent处理,所以此外不能再加encodeURIComponent,否则就是二次编码了
 _urlReq.data = _data;
 sendToURL(_urlReq);
}

服务端可以这样处理:

protected void Page_Load(object sender, EventArgs e)
{
 string q = Request["q"];
 if (!string.IsNullOrEmpty(q)) {
  string _file = Server.MapPath("~/log.txt");
  File.AppendAllText(_file,q + "\t" + Request.HttpMethod + "\t" + DateTime.Now + Environment.NewLine);
 }
}

如果发送了数据后,还要响应服务端的结果(比如取得服务端的返回值,再继续到Flash中处理),Flash中可这样写:

var loader:URLLoader = new URLLoader();
configureListeners(loader);
var request:URLRequest=new URLRequest("/FlashHander.ashx?q=" + encodeURIComponent("菩提树下的杨过"));
try {
 loader.load(request);
} catch (error:Error) {
 trace("Unable to load requested document.");
}

//定义各种情况的回调函数
function configureListeners(dispatcher:IEventDispatcher):void {
 dispatcher.addEventListener(Event.COMPLETE, completeHandler);
 dispatcher.addEventListener(Event.OPEN, openHandler);
 dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
 dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
 dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
 dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
}

//加载完成时,将触发
function completeHandler(event:Event):void {
 var loader:URLLoader=URLLoader(event.target);
 trace("completeHandler: " + loader.data);
 lblReceive.text = loader.data; //本例中,服务端返回: msg=Hello World&Method=GET&q=菩提树下的杨过
 var vars:URLVariables=new URLVariables(loader.data);
 trace("The Method is " + vars.Method); //服务端返回的字符串中如果有 Method=xxx 这样的字符,则Flash中可以直接用vars.Method进行访问
}

//刚开始请求时,将触发
function openHandler(event:Event):void {
 trace("openHandler: " + event);
}

//下载进度发生变化时,将触发(可利用这个做加载进度条)
function progressHandler(event:ProgressEvent):void {
 trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal);
}

//因安全原因出现错误时,将触发
function securityErrorHandler(event:SecurityErrorEvent):void {
 trace("securityErrorHandler: " + event);
}

//http请求状态变化时,将触发
function httpStatusHandler(event:HTTPStatusEvent):void {
 trace("httpStatusHandler: " + event);
}

//io错误时,将触发
function ioErrorHandler(event:IOErrorEvent):void {
 trace("ioErrorHandler: " + event);
}

服务端FlashHander.ashx可以这样处理:

注意:返回的字符串格式为 name1=value1&name2=value2&name3=value3... 如果name和value中本身包含"="与"&",请注意用其它字符替换掉

/// 
/// Summary description for FlashHander
/// 
public class FlashHander : IHttpHandler
{
 public void ProcessRequest(HttpContext context)
 {
  context.Response.ContentType = "text/plain";
  context.Response.Write("msg=Hello World&Method=" + context.Request.HttpMethod + "&q=" + context.Request["q"]);
 }
 public bool IsReusable
 {
  get
  {
    return false;
  }
 }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • hadoop: hdfs API示例

    利用hdfs的api,可以实现向hdfs的文件、目录读写,利用这一套API可以设计一个简易的山寨版云盘,见下图:

    菩提树下的杨过
  • 解决JQuery中的ready函数冲突

    jQuery确实是一个提高前端开发效率的好框架(虽然很多大牛们都说它效率不咋地),但是用好它有时候并不容易,也许你也遇到过以下情况: 一个aspx页面通常可以包...

    菩提树下的杨过
  • rpc框架之 thrift 学习 1 - 安装 及 hello world

    thrift是一个facebook开源的高效RPC框架,其主要特点是跨语言及二进制高效传输(当然,除了二进制,也支持json等常用序列化机制),官网地址:htt...

    菩提树下的杨过
  • Spark会把数据都载入到内存么?

    很多初学者其实对Spark的编程模式还是RDD这个概念理解不到位,就会产生一些误解。

    用户2936994
  • 入门Python 3,我只推荐这一本《Python编程无师自通》

    关于Python的入门书籍,之前和大家分享过很多了,今天再和大家分享一本在美亚上影响力超高的一本Python 3入门书——《Python编程无师自通》

    一墨编程学习
  • 浅谈委托

    委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Swit...

    小蜜蜂
  • 嘉年华回顾丨 杨长老带你解密 Oracle 19c 和 20c 的新特性

    数据技术嘉年华汇聚学术精英、国产数据库领袖、行业数据库专家、互联网卓越产品,相邀数据英雄,探索数据价值,共论智能未来!

    数据和云
  • 从0实现一个mini redux

    本文从 redux 原理出发,一步步实现一个自己的 mini-redux,主要目的是了解其内部之间的各种关系,所以本篇不会讲解太多关于 redux 的用法

    落落落洛克
  • 从 0 实现一个 mini redux

    本文从 redux 原理出发,一步步实现一个自己的 mini-redux,主要目的是了解其内部之间的各种关系,所以本篇不会讲解太多关于 redux 的用法

    小鑫
  • redux

    Redux 是 JavaScript 状态容器,提供可预测化的状态管理。可以让你构建一致化的应用,运行于不同的环境(客户端、服务器、原生应用),并且易于测试。R...

    _kyle

扫码关注云+社区

领取腾讯云代金券