前一篇文章写了flash本地通信的方法,这篇文章主要研究一下flash访问数据库的方法。一个完整的flash访问数据库的程序,包括两部分,一是flash端请求程序,一是服务端接收到请求处理并返回数据的程序。这就类似一个aspx网页,每一个aspx页面都对应着一个aspx.cs文件,aspx页面将数据以各种形式呈现给用户,而呈现的数据是aspx.cs文件提供的。Flash程序也一样,flash端只负责将数据以不同的形式表现给用户,而表现的这些数据是服务程序提供的,flash通过自身的提供的方法向服务端发送请求,服务端接收到参数后访问数据库取得数据,并以一定的格式返回,flash端再通过自身指定的对象接收服务端返回的数据,并将其展现出来,这就完成了一次flash与后台程序或者说flash通过后台程序访问数据库的操作。
下面重点将三种flash请求和接收数据的方法
一、loadVariables
loadVariables(url:String, target:Object, [method:String]) : Void
url:服务端地址。
target:指向接收所加载变量的影片剪辑的目标路径。
method: [可选] - 指定用于发送变量的 HTTP 方法。该参数必须是字符串 GET或 POST。GET方法将变量附加到 URL 的末尾,它用于发送少量的变量。POST方法在单独的 HTTP 标头中发送变量,它用于发送长字符串的变量。
例:一个简单的flash与数据库交互的例子,当鼠标移动到按钮上时,在鼠标旁边以文本框的形式显示按钮的信息(按钮的信息在数据库中存储)。
Flash端请求数据代码:
这样将根影片剪辑上的所有变量发送给了一个aspx服务,并指定用根影片剪辑_root,来接收服务端返回的数据,这样适合变量较少的情况,因为这中方法是将根影片剪辑上的所有变量都发送到了服务端,如果想有选择的对变量进行发送,可用http://10.72.25.203/flashy/FlashService.aspx?变量名1=变量1值&变量名2=变量2值 这种方式来发送。
Flash端接收服务端返回数据的代码:
用根影片剪辑的onData事件接收,并将接收到的数据(存储在变量you中)用文本域的形式显示。
Flash按钮事件和发送变量的定义代码:
注意代码写完后在发布设置中将本地回放安全性设为:只访问网络(后面的例子全部做相同的设置)。
服务端接收代码:
注意如果用URL?Par1=Value1&Par2=Value2这种方式发送请求,接收代码应写为:
服务端返回给flash数据的代码:
服务端完整代码:
服务端接收到变量zhan_name后,通过Oracle存储过程取数据,然后返回,注意返回形式:Response.Write("you="),将返回的结果集赋给了变量you,flash端可以接收到you的值,注意这种方式一次只能够返回一个变量,如果这样写:Response.Write("you=132,qi=234"),这样flash是读不出qi的,读出you的值是:132,qi=234。
二、LoadVars类
LoadVars类的load,send和sendAndLoad方法也可以像loadVariables一样向服务端发送并接收数据,但要比loadVariables合理的多,因为loadVariables每次将当前影片剪辑内的所有变量都发向了服务端,这很可能将我们不希望发送的数据也发送了过去,同时服务端也只能向flash返回一个变量,而LoadVars类就解决了这些问题。
我们先看看LoadVars类的方法和事件:
方法:
Load(URL):将LoadVars对象内容发送到指定的URL服务地址。
Send(URL, [,目标窗口,传送方式]):从指定的URL服务地址加载数据。
sendAndLoad(URL,接收对象,[传送方式]):将LoadVars对象内容发送到指定的URL服务地址,并接收服务端返回的值。
getBytesLoaded():返回目前加载数据的字节数。
事件:
onLoad(success):数据加载完触发,并传入参数,success的值为true,表示加载成功,否则加载失败。
例:将上面的例子改用LoadVars实现,并优化一下,增加了发送到服务端的变量个数,返回数据到XML文件中。整个代码如下,注释较全,不再做解释。
注意:发布生成的swf文件必须在iis里面发布用“http://...”地址来访问,或者做下面设置,否则直接打开是加载不上数据的(flash播放器的安全性阻止了数据访问)。
本地访问设置步骤:
1、在flash播放器上点击右键/设置/高级
2、在打开的网页上面点击全局安全性设置面板
点击编辑位置,将生成的swf位置添加进去,关掉网页,OK了。
服务端接收参数的方法和loadVariables相同,不同的是返回数据的时候返回的是一个xml文件,返回数据的代码如下:
代码比较简单,就不做解释了。
三、XML
XML类的send和senAndLoad方法和LoadVars类的这两个方法类似。
1、public send(url:String, [target:String], [method:String]) : Boolean将指点的XML发送到URL地址。
url:指定 XML 对象的目标 URL。
target: [可选]显示服务器返回的数据的浏览器窗口:
_self 指定当前窗口中的当前帧。
_blank 指定一个新窗口。
_parent 指定当前帧的父级。
_top 指定当前窗口中的顶级帧。
如果不指定 target 参数,则与指定 _self 的效果相同。
method: [可选] HTTP 协议所使用的方法:"GET" 或 "POST"。在浏览器中,默认值为 "POST"。在 Flash 测试环境中,默认值为 "GET"。
例:
var my_xml:XML = new XML("<Root><name>flashPar1</name><date>flashPar2</date></Root>");
my_xml.contentType = "text/xml";
my_xml.send("http://10.72.25.203/flashy/FlashService.aspx ", "_blank");
2、public sendAndLoad(url:String, resultXML:XML) : Void
url:指定的 XML对象的目标 URL。
resultXML:目标 XML对象,它将接收来自服务器的返回信息。
例:用XML类的sendAndLoad实现一个用户登录,flash界面上放两个输入文本用于输入用户名和密码,一个输出文本显示登录验证信息,一个按钮发送数据,
Flash端代码如下:
服务端接收XML发送的数据的方法和前面的方法都不同,要从Http包头中取发送过来的数据,服务端接收数据的代码如下:
接收到数据以后就是ado.net的工作了,就不赘述了,取完数据返回给falsh的方法和LoadVars例子中返回的方法相同。
访问数据库的就写到这,以后有空了再整理flash与JavaScript交互的方法。