2022年flash结合数据库 .pdf
一、使用loadVariables一个例子简单的描述了如何通过GET 方法向服务器端的ASP发送请求:_root.pushAction=function(URL,)this.loadVariables(URL,GET);var ask=true;var pushURL=”http:/localhost/test/return.asp?ask=”+ask;pushAction(pushURL);_root.onEnterFrame=fuction()trace(_root.output);这里首先定义了一个名为pushAction 的函数,在 loadVariables函数中使用了GET 参数。然后定义了一个名为ask 的布尔型变量,用来向服务器传递变量。最后使用pushAction函数向服务器上的一个名为return 的 ASP页面发送GET 请求。如果需要对这样的请求作出处理,在 ASP中,URL 行的分析结果存在于Request 对象中,比如下例:return.asp 这样,一个名字为output,值为 str_Msg 的变量就发送回Flash Player中,可以在flash 中以 output 的名字引用这个变量。当然我们必须注意服务器在处理这个过程中是需要时间的,因此最后那个onEnterFrame用来测试是否有变量返回.名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -二、使用LoadVarsloadVariables 提供了一种简单的方法让我们可以从服务器端的ASP或者 PHP页面载入变量,除了使用GET 方法,它还可以使用POST 方法将客户端提交的数据传递给服务器。然而在处理大量客户端与服务器端交互的信息时,使用过多的loadVariables语句会让整个程序的维护性和可读性变得复杂。在Flash MX 的 Action 中,新增加了一个LoadVars 的对象,并将它和XML,XMLSocket对象一起归纳于Client/Server对象之下。LoadVars 对象是loadVariables 动作的替代方法,它能够提供一种更好的结构向服务器发送和返回信息。一个典型的 LoadVars 对象使用的例子如下:/构造一个新的LoadVars对象myload=new LoadVars();/设定 myload的动作,以便服务器验证myload.action=post;/验证和服务器连接的函数myload.onLoad=function(success)/如果和服务器成功连接则 if(success)/如果验证动作成功则 if(this.conn=1)/将返回对象中的output变量赋值给场景中var为 output的 Dynamic Text框 _root.output=this.output;else /如果和服务器连接不成功则返回失败消息,需要检查路径是否正确 _root.output=Cant connect to Server;/Dynamic Text的初始值为一个等待消息_root.output=Waiting for response.;/将 myload下的变量发送到服务器端,并将服务器返回的数据结果放在myload对象中myload.sendAndLoad(http:/localhost/test/return.asp,myload,post);/myload.sendAndLoad(http:/localhost:8001/test/return.php,myload,post);在场景中以一个var 名为 output 的 Dynamic Text框来接受来自服务器的消息。使用LoadVars,我们可以利用sendAndLoad 方法将一个 LoadVars 的实体下的所有变量发送出去,并将服务器返回的数据结果存储到一个目标对象中,其中conn,output 都是从服务器发送回来的,我们还利用了其onLoad 事件函数来检验其是否将信息发送到了服务器页面,再利用从服务器传回来的数据(this.conn)来验证信息是否正确。服务器页面的代码如下:ASP return.asp:PHP return.php:如果本例执行成功,则会在Flash Player 中出现成功画面,如图所示。如果失败,则返回失败消息(一般都是路径出错)名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -三、使用xmlFlash 中的 XML 对象也有方法可以将XML 数据向服务器发送。即 send 和 sendAndLoad。send方法向某个URL 传递XML 对象,返回的信息都被发送到另外一个浏览器窗口;sendAndLoad 方法向某个URL 发送一个XML 对象。返回的信息都放在一个XML 对象中。在某种程度上,XML 的 send 方法和 sendAndLoad 方法类似于loadVars 对象的 send 方法和 sendAndLoad 方法。以 login 系统为例。首先将Flash 中需要传送的信息(用户名和密码)转换成一个XML 对象,然后将数据作为XML 文档发送到服务器端脚本。在服务器端我们还是从数据库中提取相应的数据,在服务器端脚本中对这两种信息验证。最后将验证成功的信息也以XML 格式传送回 Flash。图 1 显示了这种结构:首先,看看数据库的结构,很简单,用Access 做一个名为login.mdb(存储到同swf,asp文件同同一目录下)的数据库文件,然后新建一个名为admin 的表,第一个字段名称是”id”,数据类型是自动编号;第二个字段名称是username,数据类型是文本。字段大小改为16;第三个字段名称为password,数据类型是文本,字段大小也改为16。表结构如图2 所示:接着,我们用Flash 做一个登录界面。为了使得这个界面在其他地方也能用到,可以将所有的元件都集中到一个名为login 的 MC 里面。这个MC 的基本结构如下:bg 层:用来放置登录界面的背景。第二帧加关键帧;Title 层:用来放置标题MC,MC 名字为title,因为只是一个标题,就不列出这个MC 的结构了。第二帧加关键帧;Inputbg层:input 文本的背景。InputTXT 层:两个 input 文本,第一个的 var 为 name,第二个的 var 为 pass,类型为 Password,我们要向服务器发送的变量就从这里获得;Pushbt 层:一个确定按钮(名字为 pushbt),用来发送一个XML 变量,其action 如下:Action for pushbt:on(release,keyPress)/新建一个 xml 对象,节点明为LOGIN。在属性 /中存放用户名和密码 loginXML=new XML();loginElement=loginXML.createElement(LOGIN);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -loginElement.attributes.name=this.name;loginElement.attributes.pass=this.pass;loginXML.appendChild(loginElement);/新建一个 xml对象,用来存放从服务器返回的信息 loginReplyXML=new XML();loginXML.sendAndLoad(http:/localhost/chklogin.asp,loginReplyXML);Msg=正在等待服务器验证;gotoAndStop(2);这一层有两帧,第一帧的action 为 stop();第二帧上的action 为Action for frame2 stop();function onLoginReply()/提取从服务器返回的数据并判断信息是否正确 var reply=this.firstChild;if(reply.nodeName=LOGINREPLY&reply.attributes.login=1)Msg=reply.attributes.msg;/返回服务器信息loginReplyXML.onLoad=onLoginReply;这个 MC 最后将如图3 所示:login MC的第一帧名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -login MC的第二帧这样,如果你输入的name 为 admin,pass 为 admin 的话,按下确定按钮,服务器的chklogin.asp页面就会接受到以下XML:在服务器响应并验证了信息之后,需要发送回来以下形式的XML:最后看看asp 怎么写。chklogin.asp:%/创建一个新的DomDocument对象,存入客户端传送过来的XML 请求var xmlReceive=new ActiveXObject(Msxml2.DomDocument);xmlReceive.loadXML(Request.Form();var reElement=xmlReceive.documentElement;/提取用户名和密码信息password=reElement.attributes0.nodeValue;username=reElement.attributes1.nodeValue;/创建并打开一个新连接。var conn=new ActiveXObject(ADODB.CONNECTION);strconn=DBQ=+Server.MapPath(login.mdb)+;DefaultDir=;Driver=Microsoft Access Driver(*.mdb);conn.Open(strconn);/新建并打开一个查询var rs=new ActiveXObject(ADODB.RECORDSET);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -sql=select*from admin where id=1;rs.open(sql,conn,1,1);/开始验证if(!(rs.BOF&rs.EOF)if(password=rs(password)&username=rs(username)Msg=恭喜你,+username+你已经成功登陆!;else if(username!=rs(username)Msg=对不起,您填写的用户名不正确,请返回重新填写;else if(password!=rs(password)Msg=对不起,您填写的密码不正确,请返回重新填写;else Msg=登陆没有成功,看上去服务器出了点问题。/创建一个新的DomDocument对象,向客户端发送var xmlRepley=new ActiveXObject(Msxml2.DomDocument);xmlRepley.loadXML();Response.Write(xmlRepley.xml);%我们知道,Flash 中 xml.sendAndLoad方法是以 HTTP 的 POST 方法发送到服务器页面的,因此这个XML 数据存在于Request 对象中。在DOM 中可以直接象在第5 行中使用的方法那样以 loadXML 的方法加载。虽然可以使用DOM 的其他方法来创建xmlRepley 这个 XML 文档(例如createNode),但是那样对初学者来说是很难控制的。因此简单的以字串的形式加载到xmlRepley 中更为直观。如果你有了一定的经验后,需要利用ADO 从数据库中提取数据并封装为XML 文档,那么就会发现使用createNode 方法会有效率一些。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -