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")
如此简单的计算在客户端可以瞬间完成,但对于大型数据而言,仅靠一台客户端有时是很困难的,把数据提交到服务器,然后由服务器完成相关计算,不但可以减轻客户端的负担,而且数据的安全性也得到了很好的保护。