flash与asp/php/asp.net通信的方法

一、使用loadVariables
一个例子简单的描述了如何通过GET方法向服务器端的ASP发送请求:

代码如下:

1_root. pushAction = function(URL,) {  2    this.loadVariables(URL, "GET");  3}  4var ask = true;  5var pushURL = ”http://localhost/test/return.asp?ask=”+ ask;  6pushAction (pushURL);  7_root.onEnterFrame = fuction(){  8               trace(_root.output);  9}  10
1这里首先定义了一个名为pushAction的函数,在loadVariables函数中使用了GET参数。然后定义了一个名为ask的布尔型变量,用来向服务器传递变量。最后使用pushAction函数向服务器上的一个名为return的ASP页面发送GET请求。如果需要对这样的请求作出处理,在ASP中,URL行的分析结果存在于Request对象中,比如下例: 2

return.asp
[Copy to clipboard] [ - ]CODE:
<%@ Language="JScript" %>
<%
//声明并定义接受请求的变量
var str_getask= Request.QueryString("ask"); 
//声明并定义返回信息变量
var str_Msg = "Sorry! Your request tread awry.";
//如果接受到的变量为true,则返回成功消息
if (str_getask == "true"){
str_Msg = "OK! Your request succeed!";
}
Response.write("output=" + str_Msg);
%>
这样,一个名字为output,值为str_Msg的变量就发送回Flash Player中,可以在flash中以output的名字引用这个变量。当然我们必须注意服务器在处理这个过程中是需要时间的,因此最后那个onEnterFrame用来测试是否有变量返回.
**二、使用LoadVars
**loadVariables提供了一种简单的方法让我们可以从服务器端的ASP或者PHP页面载入变量,除了使用GET方法,它还可以使用POST方法将客户端提交的数据传递给服务器。然而在处理大量客户端与服务器端交互的信息时,使用过多的loadVariables语句会让整个程序的维护性和可读性变得复杂。在Flash MX的Action中,新增加了一个LoadVars的对象,并将它和XML,XMLSocket对象一起归纳于Client/Server对象之下。LoadVars 对象是 loadVariables 动作的替代方法,它能够提供一种更好的结构向服务器发送和返回信息。一个典型的LoadVars对象使用的例子如下:

1//构造一个新的LoadVars对象 2myload = new LoadVars(); 3//设定myload的动作,以便服务器验证 4myload.action = "post"; 5//验证和服务器连接的函数 6myload.onLoad = function(success) { 7//如果和服务器成功连接则… 8    if (success) { 9//如果验证动作成功则… 10        if (this.conn == "1") { 11         //将返回对象中的output变量赋值给场景中var为output的Dynamic Text框 12            _root.output = this.output; 13        } 14    } else { 15        //如果和服务器连接不成功则返回失败消息,需要检查路径是否正确 16        _root.output = "Can't connect to Server"; 17    } 18}; 19//Dynamic Text的初始值为一个等待消息 20_root.output = "Waiting for response..."; 21//将myload下的变量发送到服务器端,并将服务器返回的数据结果放在myload对象中 22myload.sendAndLoad("http://localhost/test/return.asp", myload, "post"); 23//myload.sendAndLoad("http://localhost:8001/test/return.php",myload, "post"); 24

在场景中以一个var名为output的Dynamic Text框来接受来自服务器的消息。使用LoadVars,我们可以利用sendAndLoad方法将一个LoadVars的实体下的所有变量发送出去,并将服务器返回的数据结果存储到一个目标对象中,其中conn,output都是从服务器发送回来的,我们还利用了其onLoad事件函数来检验其是否将信息发送到了服务器页面,再利用从服务器传回来的数据(this.conn)来验证信息是否正确。服务器页面的代码如下:
ASP return.asp:

代码如下:

1<%@ Language="JScript" %> 2<% 3var str_Msg; 4var action; 5var conn; 6action = Request.Form("action"); 7if (action == "post"){ 8    str_Msg = "OK! return a Msg to you!"; 9    conn = 1; 10} 11Response.write("conn=" + conn + "&output=" + str_Msg); 12%> 13
1PHP return.php: 2

代码如下:

1<?php 2$action = $HTTP_POST_VARS["action"]; 3if ($action == "post") { 4    $str_Msg = "OK! return a Msg to you!"; 5    $conn = 1; 6} 7echo "conn=" . $conn . "&output=" . $str_Msg; 8?> 9
1如果本例执行成功,则会在Flash Player中出现成功画面,如图所示。如果失败,则返回失败消息(一般都是路径出错) 2

**三、使用xml
**Flash中的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:

代码交流 2021