14.4.1 Flash提交数据给ASP
在实际应用中,考虑到安全性等原因,许多数据都要被用户提交到服务器端进行处理,服务器端处理完毕后,再将结果返回给用户。下面这个例子就是由用户通过Flash界面提交数据给服务器端的ASP,ASP对数据进行处理(进行乘方运算)后,将结果再返回到用户的Flash界面。
1.打开Flash,选择【File】|【New】命令,在弹出的【New Document】对话框中选择文档类型为【Flash File(ActionScript 3.0)】,单击【OK】按钮,新建一个Flash文档。然后将其保存到IIS主目录(D盘下的“wwwroot”文件夹)下的“calOnServer”文件夹,并命名为“calOnServer.fla”。
2.选择【File】|【New】命令,在弹出的【New Document】对话框中选择文档类型为【ActionScript File】,单击【OK】按钮,新建一个Flash脚本文档,然后将该Flash脚本文档同样保存到“D:\wwwroot\calOnServer”下,并命名为“calOnServer.as”,使其与上面的“calOnServer.fla”在同一文件夹下。
3.在“calOnServer.fla”文档的属性面板中设置其【Document class】为“calOnServer”,然后在“calOnServer.as”脚本文档中输入下列代码并保存:
package {
?????? //导入文件运行所需的类
?????? import flash.display.*;
?????? import flash.text.*;
?????? import flash.net.*;
?????? import flash.events.*;
?????? import flash.errors.*;
?????? import flash.system.*;
?????? public class calOnServer extends Sprite {
????????????? //定义显示结果文本框
????????????? private var resultTxtFld:TextField;
????????????? //定义被传递的参数的类型
????????????? private var num:Number;
????????????? //定义ASP文件路径
????????????? private var aspPath:String;
????????????? //定义URLRequest和URLLoader对象
????????????? private var aspRequest:URLRequest;
????????????? private var aspLoader:URLLoader;
????????????? //构造函数
????????????? public function calOnServer() {
???????????????????? init();
???????????????????? startLoad()
????????????? }
????????????? //初始化
????????????? private function init() {
???????????????????? //设置编码,不然会显示乱码
???????????????????? System.useCodePage=true;
???????????????????? //在场景中添加一个用于接收数据的文本框
???????????????????? resultTxtFld= createTextField(220,200, 100, 20);
resultTxtFld.autoSize=TextFieldAutoSize.CENTER
???????????????????? resultTxtFld.type = TextFieldType.DYNAMIC;
???????????????????? resultTxtFld.text = "结果显示区...";
????????????? }
????????????? //载入函数
????????????? private function startLoad(){
???????????????????? //初始化被传递的参数为15,服务器返回的结果将是该值的平方,即225
???????????????????? num=15;
???????????????????? aspPath="http://127.0.0.1/calOnServer/calOnServer.asp?num="+num;
???????????????????? aspRequest=new URLRequest(aspPath);
???????????????????? aspLoader=new URLLoader();
???????????????????? configureListeners(aspLoader);
???????????????????? try {
??????????????????????????? aspLoader.load(aspRequest);
???????????????????? } catch (error:Error) {
??????????????????????????? resultTxtFld.text="加载ASP文件失败...";
???????????????????? }
????????????? }
????????????? //分派侦听事件
????????????? private function configureListeners(dispatcher:IEventDispatcher):void {
???????????????????? dispatcher.addEventListener(Event.COMPLETE,aspLoadComplete);
???????????????????? dispatcher.addEventListener(IOErrorEvent.IO_ERROR,aspLoadError);
????????????? }
????????????? //ASP载入结束时的处理
????????????? private function aspLoadComplete(event:Event):void {
???????????????????? resultTxtFld.text="15×15="+event.target.data;
????????????? }
????????????? //ASP载入错误时的处理
????????????? private function aspLoadError(event:IOErrorEvent):void {
???????????????????? resultTxtFld.text="加载ASP文件失败";
????????????? }
????????????? //生成文本框函数
????????????? private function createTextField(x:Number, y:Number, width:Number, height:Number):TextField {
???????????????????? var tmpTxtFld:TextField = new TextField();
???????????????????? tmpTxtFld.x = x;
???????????????????? tmpTxtFld.y = y;
???????????????????? tmpTxtFld.width = width;
???????????????????? tmpTxtFld.height = height;
???????????????????? tmpTxtFld.background = true;
???????????????????? tmpTxtFld.border = true;
???????????????????? addChild(tmpTxtFld);
???????????????????? return tmpTxtFld;
????????????? }
?????? }
}
4.打开Windows 2003附件中的“记事本”程序,并输入以下代码:
<%
num=Request("num")
result=num*num
Response.Write result
%>
注意,输入上面的标点符号时输入法要切换到英文状态。
5.将该文件另存为“calOnServer.asp”,并拷贝到“D:\wwwroot\calOnServer”下,使其与上面的“calOnServer.fla”和“calOnServer.as”在同一文件夹下。
6.按下【Ctrl+Enter】组合键,在“calOnServer.swf”窗口的结果显示文本框中将看到计算后的结果“81”。如图14-4-1所示。
图14-4-1运行结果
从上面的“calOnServer.as”脚本文档中可以看到,Flash向ASP提交参数的方式是在ASP文件路径后面加上问号,然后再跟上参数名称与参数值,参数名称与参数值之间用等号连接,如上面的:
aspPath="http://127.0.0.1/calOnServer/calOnServer.asp?num="+num;
上面的num参数在代码中被赋值为“9”后,此时的aspPath的实际形式为:
aspPath="http://127.0.0.1/calOnServer/calOnServer.asp?num=9
服务器端的ASP用Request方法来获取num:
num=Request("num")
在该例中只传递了一个参数,如果有多个参数需要传递,则不同的参数之间需要用“&”区分开,如:
aspPath="http://127.0.0.1/calOnServer/calOnServer.asp?num1="+num1+"&num2="+num2+"&num3="+num3;
如果上面的num1取值2,num2取值3,num3取值4,则aspPath的实际形式为:
http://127.0.0.1/calOnServer/calOnServer.asp?num1=2&num2=3&num3=4
在服务器端的ASP中,可以分别利用Request方法来获取Flash提交的数据:
num1=Request("num1")
num2=Request("num2")
num3=Request("num3")
如此简单的计算在客户端可以瞬间完成,但对于大型数据而言,仅靠一台客户端有时是很困难的,把数据提交到服务器,然后由服务器完成相关计算,不但可以减轻客户端的负担,而且数据的安全性也得到了很好的保护。