解决as3在与外部脚本交互过程中的数据异步的几种方案

作者Kuma 文章分类 分类:About Codes 文章评论 4条评论 阅读次数 已被围观 1813

        在写生活博客系统的as代码的时候,遇到了这个数据异步的问题,当时很恼火于as3的这种机制。不过后来在研究的时候还是想到了3种解决方案,两种as内部解决方案和一种结合外部脚本的解决方案。

        先贴上一个会出现数据异步的代码例子:

        

function checkAdmin(admins:String, passwords:String):Boolean {
	phpApiPostObject = new URLVariables;
	phpApiUrlLoader = new URLLoader();
	phpApiUrlRequest = new URLRequest("http://localhost/swfapi.php");
	phpApiUrlRequest.method = "post";
	phpApiUrlRequest.data = phpApiPostObject;
	phpApiPostObject.admin = admins;
	phpApiPostObject.password = passwords;
	phpApiUrlLoader.load(phpApiUrlRequest);
	phpApiUrlLoader.addEventListener(Event.COMPLETE, phpApiUrlLoaderComplete);
	function phpApiUrlLoaderComplete(e:Event):void
	{
		returnData = e.target.data;
	}
	if(returnData == "true"){return true }else{return false };
}

如上面代码所示,我的目的是要往该函数传入2个参数,然后函数将这两个参数发送到php端,php端接收到参数后处理,函数然后读取处理结果,再将结果返回一个布尔值回来。但是该函数将永恒返回false,原因是
flash的运作机制与php不同,它不会在COMPLETE事件执行后才执行下面的代码,而是将COMPLETE事件和下面的时间同时执行。

那么如何解决上面的问题呢?我们可以通过增加一个function类型的参数传入函数,以监听complete事件。代码如下:

 

function checkAdmin(admins:String, passwords:String,fun:Function):Boolean {
	phpApiPostObject = new URLVariables;
	phpApiUrlLoader = new URLLoader();
	phpApiUrlRequest = new URLRequest("http://localhost/swfapi.php");
	phpApiUrlRequest.method = "post";
	phpApiUrlRequest.data = phpApiPostObject;
	phpApiPostObject.admin = admins;
	phpApiPostObject.password = passwords;
	phpApiUrlLoader.load(phpApiUrlRequest);
	phpApiUrlLoader.addEventListener(Event.COMPLETE, phpApiUrlLoaderComplete);
	function phpApiUrlLoaderComplete(e:Event):void
	{
		returnData = e.target.data;
		fun(returnData);
	}
}

function fun(s:String):Boolean{
	if(s=="true"){
		return true;
	}else{
		return false;
	}
}

 如上所示,你在使用该函数的时候,可以通过传入一个function来处理返回结果。

除了如上方法,还可以使用下面两种思想解决数据异步问题:

1.自定义广播事件:以上面的函数为例,可以在complete事件里面定义一个EventDispitcher提供给外部程序监听,然后再调用函数里面的returnData的值。

2.结合脚本,当PHP端处理完数据后,用JS回调flash。

这是我总结的3种解决数据异步的方法,希望对大家有所帮助。

分类:About Codes
标签: Flash php as3

通告: http://mouselife.net/tb.php?sc=e80ab8&id=94

评论:

  1. [回复]小牛哥发表于 2010-03-21 15:24
    代码高亮,你这个代码框是怎么弄的?????
    还可以收缩??
    • [回复]Kuma发表于 2010-03-21 16:25
      @小牛哥:代码高亮插件。
  2. [回复]Tangboke发表于 2010-02-05 08:56
    你的博客系统好似不是WP
    • [回复]Kuma发表于 2010-02-05 09:57
      @Tangboke:嗯,不是WP,是国内开源PHP+MYSQL博客系统emlog,很好的,操作简单,可扩展性好,速度比WP快N倍
  3. [回复]H发表于 2010-02-04 07:16
    恩恩恩,估计我一辈子都学不会,人懒没办法啊~~
    • [回复]Kuma发表于 2010-02-04 08:17
      @H:不是学不学得会的问题,而是是否必要学的问题,哈哈
  4. [回复]H发表于 2010-02-03 15:19
    偶滴娘亲,看得我一头雾水~~
    云里雾里都分不清了……
    老爸是个工作狂啊工作狂
    转转走了,不用送了……
    • [回复]Kuma发表于 2010-02-03 16:21
      @H:呃,你不学这一块儿,当然看不懂了……

发表评论: