• 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;
      }
     }
    }
    
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [转载]DataView详解
    (转)C#中“EQUALS”与“==”的速度比较
    CS0016: 未能写入输出文件“c:WindowsMicrosoft.NETFramework64v2.0.50727Temporary ASP.NET Files oot921bbfc4ca7cf42App_Code.fu98jwep.dll”--“拒绝访问。 ”
    C# 配置错误定义了重复的“system.web.extensions/scripting/scriptResourceHandler”节
    C# 利用mysql.data 在mysql中创建数据库及数据表
    【转载】经典SQL语句大全
    我不是一个做产品人,但我有一颗做产品的心--浅谈“痛点”
    软件工程--个人总结
    第十六周进度条
    梦断代码阅读笔记3
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1681530.html
Copyright © 2020-2023  润新知