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

Kuma post in [About Codes] 2010-2-3 9:22 Wednesday

        在写生活博客系统的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种解决数据异步的方法,希望对大家有所帮助。

Tags: 标签: Flash php as3

引用地址:

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

昵称

网址

电邮