Flash后台——ASP/ASP.NET/PHP/Java/JavaScript/Delphi总动员
Posted on 2007-12-27 13:16 body 阅读(484) 评论(0) 收藏 举报10.2 两个Demo示例
10.2.1 Demo示例(1):读取ASP.NET返回的值
本节我们将讲解用Flash与ASP. NET交互的基本知识。首先我们在“解决方案资源管理器”面板内的地球标识上点右键,选择“填加新项”,在弹出的命名选项卡中,我们给页面命名为load.aspx,同上节一样,填加之后点击页面左边的+号,即可展开其逻辑代码load.aspx.cs。进入load.aspx的编辑界面,在左下角选择“源”的编辑方式。把除第一句以外的所有代码都删除,第一句修改如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="load.aspx.cs" Inherits="load" CodePage="65001"%>
解释一下这句代码,在ASP章已经学过,一个完整的ASP页包含若干“声明”:文档类型声明、编码声明等等。本句就是ASP.NET中的声明:“<%” 表示HTML页面中ASP.NET代码的开始“%>”表示HTML页面中ASP.NET代码的结束。其他声明的解释如下表:
|
ASPX页声明 |
解释 |
|
@Page Language="C#" |
表示页面后台语言是C# |
|
AutoEventWireup="true" |
绑定事件功能开启(可以用”Page_Init”和”Page_Load”事件) |
|
CodeFile="load.aspx.cs" |
逻辑代码是load.aspx.cs |
|
Inherits="load" |
引用类load |
|
CodePage="65001" |
编码方式UTF-8 |
由于我们通过XML和Flash交互,所以我们删除了load.aspx中所有的HTML代码,让逻辑代码包办一切输出行为。进入逻辑代码load.aspx.cs,并开始构造思路: 我们想让Flash用loadVariables,LoadVars.load和XML.load向load.aspx提出请求,利用myMethod这个GET参数,作为不同请求的标识。load.aspx把参数值送交逻辑层分析选择,最后由逻辑层负责返回相应的结果:
1. 如果myMethod值为空,则load.aspx返回字符串:请求为空。
2. 如果myMethod值为loadvariables,则load.aspx返回字符串:theValue=这个方式是loadVariables!
3. 如果myMethod值为loadvars,则load.aspx返回字符串:“theMethod=这个方式是loadVars&theData=利用字符串Flash与ASP.NET通信”
4. 如果myMethod值为xml,则返回一个XML文档:“<?xml version='1.0' encoding='utf-8'?><data method='这个方式是xml'>利用XML,Flash与ASP.net通信</data>”
看过上面的思路分析,学过程序设计的读者几乎都会选择switch语句:这种分支选择问题,switch语句最为方便,思路也最清晰。下面是逻辑代码:
/*--------------------------------------------------------------------------------------------------------------------------------
以下诸句表示的是导入命名空间,每个页面被创建时,Visual Studio软件自动为我们创建的,如果我们还需要处理其他类的实例,可以导入其他命名空间
---------------------------------------------------------------------------------------------------------------------------------*/
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class load : System.Web.UI.Page
{
//你应该记得load.aspx中引用的是load类,在此处我们来定义它
protected void Page_Load(object sender, EventArgs e)
{
//因为load.aspx中,AutoEventWireup属性被设置为true,所以我们可以使用Page_Init和Page_Load事件,Page_Load是当页面被载入时触发的事件
/*---------------------------------------------------------------
以上诸行代码是编程常用的switch语句,在多条件的选取中,它结构清晰不易混乱。
本例中,我对由GET方式提交过来的myMethod进行选择判断。在ASP.NET中,外部提交的数据,可以按Request["myMethod"]这样的形式接收。
---------------------------------------------------------------*/
switch (Request["myMethod"])
{
case "":
Response.Write("请求为空");
break;
case "loadvariables":
Response.Write("theValue=这个方式是loadVariables!");
break;
case "loadvars":
Response.Write("theMethod=这个方式是loadVars&theData=利用字符串Flash与ASP.NET通信");
break;
case "xml":
Response.Write("<?xml version='1.0' encoding='utf-8'?><data method='这个方式是xml'>利用XML,Flash与ASP.net通信</data>");
break;
default:
Response.Write("请求为空");
break;
}
}
}
保存,在浏览器中查看将得到图10.26 – 10.29所示:

图10.26

图10.27

图10.28

图10.29
* 注:这个例子的源文件,在附带光盘下:源文件"第十章"1"load.aspx和load.aspx.cs
从结果来看,测试是成功的!!!接下来该做Flash的部分了,废话不说,打开Flash Professional 8软件,趁它疯狂读硬盘的时候,我们放松一下大脑,顺便来设计一下Flash的设计思路。
10.2.2在Flash中用三种方式显示ASP.NET返回的值
类似于前面的例子,我们仍然用一个ComboBox组件来选择读取方式,用一个TextArea组件来显示结果。
首先我们用dataProvider给ComboBox填充文字和初始值,最后给它增加监听器,使之一旦改变,switch函数就执行判断,并执行相应函数。代码如下:
//声明myComboBox为一个新的ComboBox组件
var myComboBox:mx.controls.ComboBox;
//声明myTextArea为一个新的TextArea组件
var myTextArea:mx.controls.TextArea;
//给myComboBox增加数据源
myComboBox.dataProvider = [{data:0, label:"点击选择"}, {data:1, label: "loadVariables方式"}, {data:2, label: "loadVars方式"}, {data:3, label: "XML方式"}];
/*---------------------------------------------------------------------------------------------------------------------------------
为myComboBox组件增加监听事件,从这你应该看出第一章学习Flash监听机制的好处。Switch语句被用在Flash里判定myComboBox组件变化后的值:如果值为1,则用loadVariables方法,如果值为2,则用loadVars方法,如果值为3则用XML.load方法
--------------------------------------------------------------------------------------------------------------------------------*/
//为myComboBox定义监听函数
var listenerObject:Object = new Object();
//当myComboBox改变选项时
listenerObject.change = function(eventObject:Object) {
//选择comboBox的值
switch(eventObject.target.value){
//如果是1,执行firstMethod方法
case 1: firstMethod();break;
//如果是2,执行secondMethod方法
case 2: secondMethod();break;
//如果是3,执行thirdMethod方法
case 3: thirdMethod();break;
//默认情况什么都不做
default:0;break;
}
};
//为myComboBox增加监听函数
myComboBox.addEventListener("change", listenerObject);
/*-----------------------------------------------------------------------------------------------------------------------------
由于loadVariables没有onLoad触发事件,所以我们只能不停的利用setInterval一次次的使用checkIt函数检测,一旦读入的_root.theValue值不为空,才删除setInterval,显示读到的值
------------------------------------------------------------------------------------------------------------------------------*/
function firstMethod():Void{
loadVariables("load.aspx?myMethod=loadvariables",_root, "GET");
function checkIt() {
if (_root.theValue == undefined) {
myTextArea.text = "Loading... ";
} else {
myTextArea.text = _root.theValue;
clearInterval(myInterval);
}
}
var myInterval:Number = setInterval(checkIt, 100);
}
//定义secondMethod函数
function secondMethod():Void{
//myTextArea组件显示“Loading……”字符串
myTextArea.text = "Loading... ";
//建立myLoadVars为一个新的LoadVars对象
var myLoadVars:LoadVars = new LoadVars();
//定义myLoadVars的onLoad函数
myLoadVars.onLoad = function(success:Boolean):Void{
//如果读取成功
if(success){
//在myTextArea显示myLoadVars的theMethod属性和theData属性
myTextArea.text=myLoadVars.theMethod+""n"n"+myLoadVars.theData;
}else{
//如果读取失败,现在错误信息
myTextArea.text = "文件传输错误";
}
}
//myLoadVars读取同目录下的文件,为了防止读取缓存,在地址后加了一个随机数。
myLoadVars.load("load.aspx?myMethod=loadvars&temp="+Math.random());
}
//定义第三种方式thirdMethod,也就是XML读取
function thirdMethod():Void{
//myTextArea组件显示“Loading……”
myTextArea.text = "Loading... ";
//声明myXML为一个新的XML对象
var myXML:XML = new XML();
//声明myXML忽略空白节点
myXML.ignoreWhite=true;
//定义myXML的onLoad函数
myXML.onLoad =function(success:Boolean):Void{
//如果读取成功
if(success){
//myTextArea组件显示myXML的值
myTextArea.text = myXML.toString();
//如果读取失败
}else{
//显示错误信息
myTextArea.text = "文件传输错误";
}
}
//myXML读取同目录下的文件,为了防止读取缓存,在地址后加了一个随机数。
myXML.load("load.aspx?myMethod=xml&temp="+Math.random());
}
*注:这个例子的源文件,在附带光盘下:源文件"第十章"1"4-1-1.fla,版本为Flash 8,请勿用低于Flash 8版本软件打开。
注意:这个例子我们为了兼顾扩展性,采取了相对路径,所以要把SWF文件导出到和load.aspx页面同一层文件夹内。我建议,所有源文件最好都层级有序地放入同一个顶层文件夹内。这样更有利于你对整个工程的支配。
图10.30为我解决方案管理器的截图:

图10.30
在浏览器中以虚拟路径访问4-4-1.html或4-4-1.swf都可以显示本例效果。图10.31为展开myComboBox但尚未选择的效果:

图10.31
图10.32所示为选择loadVariables选项时的效果:

图10.32
图10.33所示为选择loadVars选项时的效果:

图10.33
图10.34所示为选择XML选项时的效果:

图10.34
10.2.3 Demo示例(2)利用Flash读取SQL Server数据库的值(1)
本节我们来练习用Flash读取SQL Server数据库中的值,思路如下:用ASP.NET连接读取数据库,并生成XML列表,Flash去读取XML列表并且格式化结果显示在组件中。
在Visual Studio 2005“解决方案资源管理器”的地球图标上点右键,选择“添加新项”,在弹出的窗口将之命名为xml_list.aspx,稍等片刻,工作区将自动转向该页面,同时在“解决方案资源管理器”内xml_list.aspx下可以展开其逻辑代码xml_list.aspx.cs。因为输出文档类型为text/xml,所以我们把list.aspx除第一行以外的所有代码都删除,且增加两个参数,修改后第代码如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="xml_list.aspx.cs" Inherits="xml_list" ContentType="text/xml" CodePage="65001"%>
保存为xml_list.aspx即可,新手朋友还可以再增加一个参数 debug=true,这样在程序出错时就会有具体的错误提示,不过记得,发布之前删除为好。接着双击xml_list.aspx.cs进入逻辑代码,把以下代码输入到文件中:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//引入SQL命名空间,这是使用SQL Server 客户端必需的
using System.Data.SqlClient;
//定义被引用的xml_list类
public partial class xml_list : System.Web.UI.Page
{
//声明公有变量sql
public string sql;
protected void Page_Load(object sender, EventArgs e)
{
//设定strConnection为数据库连接字符串
string strConnection = "Data Source=(local)""SQLEXPRESS;Initial Catalog=myTesterDB;User ID=myTester;Password=abcdefg; ";
//建立一个SQL连接,连接字符串strConnection作为一个参数
SqlConnection objConnection=new SqlConnection(strConnection);
//连接应处于“打开“状态,否则一切操作都是徒劳的。
objConnection.Open();
//设置SQL语句,读取myTable中的5条数据
sql = "SELECT top 5 * FROM [myTable] ORDER BY [myPoints] DESC+ ";";
//建立一个SQL命令对象,它有两个参数:第一个是命令即SQL语句,第二个是连接名
SqlCommand cmd = new SqlCommand(sql,objConnection);
//ASP.NET最快的读取方式:SqlDataReader,与ASP中的“1,1”有些类似,都是快速的,只读的
SqlDataReader dr = cmd.ExecuteReader();
//输出XML头,XML根节点设置,其中包括:总记录数、总页数、当前页、管理状态
Response.Write("<?xml version='1.0' encoding='utf-8'?><数据>");
//while(dr.Read)相当与“有符合的记录就执行一次”,类似于ASP的rs.MoveNext+LOOP
while(dr.Read()){
/*---------------------------------------------------------------------------------------------------------------------
每读取一次就输出一个子节点,类似于ASP要读取RecordSet中的name值用rs("name")一样,ASP.NET要读取DataReader中的name值,用dr["name"];
---------------------------------------------------------------------------------------------------------------------*/
Response.Write("<资料 用户名='"+dr["myUsername"]+"' 积分='"+dr["myPoints"]+"'介绍='"+dr["selfIntro"]+"'/>");
}
//输出XML结尾
Response.Write("</数据>");
//释放连接所耗资源
objConnection.Dispose();
//连接关闭
objConnection.Close();
//释放命令所耗资源
cmd.Dispose();
//释放DataReader所耗资源
dr.Dispose();
//DataReader关闭
dr.Close();
}
}
保存文件为xml_list.cs,在“解决方案资源管理器”中浏览xml_list.aspx效果如图10.35所示:

图10.35
* 注:该示例的源文件在光盘 第十章"2"xml_list.aspx和xml_list.cs
10.2.4 Demo示例(2)利用Flash读取SQL Server数据库的值(2)
本节只需利用Flash读取ASP.NET取回的XML值即可完成一个简单的交互示例。在Flash软件中新建一个文档,拖入主场景一个TextArea组件,并命名为myTextArea,它用来显示结果,在Flash文档的动作面板中输入以下代码:
var myTextArea:mx.controls.TextArea;
var myXML:XML=new XML();
myXML.ignoreWhite=true;
myXML.onLoad=function(success:Boolean):Void{
if(success){
var root:XMLNode=this.firstChild;
for(var i:Number=0;i<root.childNodes.length;i++){
myTextArea.text+="用户名:"+root.childNodes[i].attributes.用户名+""t";
myTextArea.text+="积分:"+root.childNodes[i].attributes.积分+""t";
myTextArea.text+="介绍:"+root.childNodes[i].attributes.介绍+""t";
myTextArea.text+=""n"n";
}
}
}
myXML.load("http://localhost:38960/WebSite1/xml_list.aspx ");
保存文件,调试代码,效果如图10.36所示:

图10.36
* 注:此示例的源文件在 第十章"2"xml_list.fla
浙公网安备 33010602011771号