经常有人问我FLASH留言板的制作方法,无奈这东西一句两句没办法说清楚,于是就萌发了写教程的想法。可后来又一想,授人以鱼,不如授人以渔,还不如集中精力好好讲将FLASH与ASP的通讯原理,原理通了,具体项目就可以自由发挥了。

我这个教程面向初级群体,在开始教程之前,我假设你已经具备FLASH操作基础知识,了解IIS配置以及运行环境。尽管FLASH与ASP通信方式有很多,但这篇教程中我选择使用LoadVars类,一因为LoadVars类容易掌握,易于讲解;二是因为它不牵扯太多其他方面的知识。另外,我在ASP中采用的是JS脚本,因为JS脚本跟AS非常像,只要你有一定的AS基础,JS不用学就可以基本看懂了。最后是FLASH版本,我选择flash pro 8.0简体中文版,swf发布为AS2.0,flashplayer8.0。

在看我的教程之前,建议先抽出几分钟阅读一下“FLASH基础开发习惯”,这样更有利于理解我的代码。

目录

  • LoadVars类基础讲解(LoadVars类以下简称LV)
  • ASP中基本的输入输出
  • LV与ASP通讯原理
  • ASP操作数据库入门
  • LV与ASP综合运用
  • 其它通讯方式原理浅谈

这里我主要围绕我的教程进行讲解,区别有些全盘灌输的教程,我将有真对性的着重讲此类的两个方法和一个事件:load、loadAndSend方法,和onLoad事件。如果你需要更详细的了解LV类,建议你查一下帮助:帮助→flash帮助→全部书籍→ActionScript 2.0 语言参考→ActionScript 类→LoadVars。当然你也可以直接搜索LoadVars。

LV与TXT通讯
不是要讲ASP吗?怎么讲起TXT了?呵呵,先别急,其实LV跟ASP通讯原理与跟TXT通讯原理是一样的。TXT大家经常用,讲起来比较容易理解。
LV跟TXT通讯需要在TXT中采用“变量”/“值”配对的数据模式。比如:wenben=我要做FLASH留言本。这里“wenben”就是变量,“我要做FLASH留言本”就是值,而“=”就是它们的配对方式,也就是建立联系的方式。 好了,现在我们建立一个“lv_shiyan.txt”文本文件,并在其中输入:neirong_txt=我要做FLASH留言本。然后在同文件夹下再建立一个“lv_shiyan.fla”,在第一贞写代码:

//设置编码,不然会显示乱码
System.useCodepage = true;
//实例化一个LV对象
var shiyan_lv = new LoadVars();
//载入外部文本
shiyan_lv.load("lv_shiyan.txt");
//载入成功后
shiyan_lv.onLoad = function(chenggong) {
if (chenggong) {
    //获取外部文本内容
    var neirong = shiyan_lv.neirong_txt;
    //输出文本内容
    trace("您载入的文本内容是:"+neirong);
}else{
    //加载失败给予提示
    trace("加载失败");
  }
};

运行上面的代码,你会在输出面板中看到“您载入的文本内容是:我要做FLASH留言本”,由此可见,外部“lv_shiyan.txt”中的内容已经成功加载。有兴趣的朋友可以改动一下TXT文件名,试验一下加载失败的情况。

通过上面的代码,我们学到以下知识
1,如何实例化一个LV对象(使用new关键字)
2,如何用LV对象加载外部文本文件(使用load方法)
3,如何判断外部文本文件是否加载成功(使用onLoad事件)
4,当外部文本文件加载成功后,如何获取并利用其内容。
在外部文本文件中,我们之所以使用“变量/值”配对的数据格式,正是为了被LV对象利用,当外部文本文件加载成功后,其中的变量就会被LV对象记录,而在AS中通过LV对象引用外部变量的方式则为:LV对象.外部文本文件中的变量名字。上面的代码中即为:shiyan_lv.neirong_txt。

上面的例子中讲了LV与TXT通讯的基本原理,现在我们来扩展一下,如果我们想在一个外部TXT中使用多个变量如何做呢?答案其实很简单,我们只需在TXT中使用多个“变量/值”对,并把每个“变量/值”对用“&”进行分隔。我们依然利用上面示例的“lv_shiyan.txt”文件,这次把里面的内容换成下面的形式:
neirong1_txt=战胜LoadVar类!&neirong2_txt=战胜ASP!&neirong3_txt=我能做FLASH留言板了!
然后再把“lv_shiyan.fla”中的代码换成下面的内容:

System.useCodepage = true;
var shiyan_lv = new LoadVars();
shiyan_lv.load("lv_shiyan.txt");
shiyan_lv.onLoad = function(chenggong) {
if (chenggong) {
    //获取外部文本内容
    var neirong1 = shiyan_lv.neirong1_txt;
    var neirong2 = shiyan_lv.neirong2_txt;
    var neirong3 = shiyan_lv.neirong3_txt;
    //输出文本内容
    trace("您载入的文本内容是:"+neirong1+"/"+neirong2+"/"+neirong3);
}else{
    trace("加载失败");
  }
};
运行上面的代码,在输出窗口我们可以看到“战胜LoadVar类!/战胜ASP!/我能做FLASH留言板了!”,说明我们获得了外部TXT中全部的变量内容。

有兴趣的朋友可以把“lv_shiyan.txt”中的内容改成下面的形式看输出结果有没有变化:

&neirong1_txt=战胜LoadVar类!
&neirong2_txt=战胜ASP!
&neirong3_txt=我能做FLASH留言板了!
然后再改成下面的结果再试验一下输出结果:)
&neirong1_txt=战胜LoadVar类!&
&neirong2_txt=战胜ASP!&
&neirong3_txt=我能做FLASH留言板了!&
原因其实很简单,自己思考一下拉:)

呼呼,好了,LV类先讲到这里了,下面讲讲ASP的基本格式和语法,尤其是输入输出语句。

ASP中基本的输入输出


ASP经过长时间的积淀,其内容非常丰富,但如果仅是为了开发一个简易的留言本,那只需要掌握最基本的输入输出就可以了。

我们新建一个asp_jichu.asp文件,在里面输入“★ASP中基本的输入输出”,然后保存。OK,这样我们就创建一个ASP文件了。怎么样?十分简单吧:)然后我们在IIS下运行这个ASP文件,就会看到网页上显示“★ASP中基本的输入输出”。内容虽然能显示,但这样的显示对我们几乎没有任何作用。ASP为何为ASP?主要是因为它能完成服务器与客户端的交互,比如它能接收客户端发送的变量,并根据这些变量以特定的方式显示客户需要的信息。而上面的“asp_jichu.asp”,并没有起到任何交互作用,也就失去了ASP的意义。

在正式开始交互讲解之前,还有必要先讲一下ASP文件的组成。ASP文件的构成只用一句话就能概括:所有的ASP语句都以“<%”开始,以“%>”结束。还有一点需要提示的是,在IIS中,一般默认ASP使用VBScript,但我们使用的是javascript,所以在ASP文件一开始,我们需要加上一句:

<%@LANGUAGE="JAVASCRIPT"%>

切入重点,首先讲如何向ASP传递变量。方法有两种,即常见的GET和POST方法。GET方法适用于传递少量内容,一般在2K以内,变量及内容会附加在网址后面,变量以“?”开头,变量和内容之间同样遵循上一篇中讲的“变量/值”配对原则。而POST方法,能够传递大量内容,且内容不会显示在网址中。虽然GET方式传递的内容少,而且不安全,但用来做教程演示却非常直观。现在我就用这种方式来演示ASP如何接收变量。还是利用我们开始建立的那个“asp_jichu.asp”文件,在其中输入如下内容并保存:

★ASP中基本的输入输出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//获取网址中变量的内容
neirong=Request("neirong_wangzhi");
//显示变量内容
Response.Write("地址栏传递过来的内容是:"+neirong);
%>

然后在IIS下运行这个文件,我们会看到网页中显示:

★ASP中基本的输入输出
地址栏传递过来的内容是:undefined

首先我需要对“asp_jichu.asp”中的语句进行一下讲解,在ASP中,用来接收资料的是“Request”对象,而用来输出内容的是则是“Response”对象的“Write”方法。需要注意的是,Request接收变量时,需要加上引号,而Response输出变量时,则不需要。这样一讲,上面的代码便不难理解,一开始我们定义一个变量“neirong”,然后用它记录传递给ASP的变量“neirong_wangzhi”中的内容,最后输出“neirong”。但是我们并没有对“neirong_wangzhi”进行赋值,所以得到了“undefined”。现在我们就使用GET方法对变量“neirong_wangzhi”进行赋值,看看效果如何。

前面已经讲过了,GET方法传递的变量及内容会在浏览器网址中显示,其实这个显示是一个中间过程,ASP正是根据这个中间过程,也就是地址栏中的信息来接收变量并进行处理最后输出内容的。所以我们完全可以利用这个中间过程,直接在浏览器地址栏中进行变量赋值。打开运行中的“asp_jichu.asp”,并在网址最后加上下面的内容,按回车键,看网页中有何变化?

?neirong_wangzhi=我要自己做FLASH留言板

哈哈,你看到了吗?这时网页中显示:

★ASP中基本的输入输出
浏览器传递过来的内容是:我要自己做FLASH留言板

这说明了什么?我们接收到地址栏里传递的变量内容了,我们成功了:)
疑!?你楞在那里干什么?怎么不跟我一起欢呼呢?是不是你GET传递方式还是不太明白?呵呵,没关系,通过上面的演示,你只需要记住以下知识点就行了:
1,ASP文件的组成方式(所有的语句写在“<%”和“%>”之间)
2,ASP如何接收外界传递的变量(使用Response对象)
3,ASP如何在浏览器中显示内容(使用Response的Write方法)
怎么样,我的要求不高吧?只要记住以上三点,你就应该完全有信心看懂我下面的内容了,加油!

友情提示:
我们把“asp_jichu.asp”文件中的内容换成下面的形式看网页中显示的内容会不会有变化?

★ASP中基本的输入输出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
neirong=Request("neirong_wangzhi");
%>
浏览器传递过来的内容是:<%Response.Write(neirong)%>

再换成如下形式看有没有变化?

★ASP中基本的输入输出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
neirong=Request("neirong_wangzhi");
%>
浏览器传递过来的内容是:<%=neirong%>

我们会发现以上三种形式得到的结果都一样,由此可见ASP的写法是很灵活的,我们要抓住其本质,不要被各种表面形式迷惑:)这里需要说明的是最后一种写法的最后一行代码。<%=neirong%>是一种输出的简写形式,它的作用相当于Response.Write,仅适用于当ASP语句只有一行,且仅输出单纯变量的情况下。

呼呼,ASP的知识暂时知道这么多就OK了,下面激动人心的时刻来到了,我们要开始ASP和FLASH之间的交互了!

LV与ASP通讯原理

ASP操作数据库入门

经过前几节的学习,我们对LV类和ASP的输入输出应该已经很熟练了吧,而且我们也已经了解了LV与ASP通讯的基本原理。这个原理可能并不复杂,不过如果你想利用它做出点东西来,关键还是要看你ASP和FLASH的基本功了。遗憾的是这篇教程主要讲述FLASH与ASP通讯原理,更详细更高级的ASP和FLASH技巧,我恐怕不能多讲,不然这篇教程不知道什么时候才能写完,同时也会失去重点。这节我将简单的罗列一些ASP操作ACCESS数据库的基本知识,注意,我只是点到为止,更详细的资料和讲解网上很多,你可以自己去搜索。

首先我们需要建立一个ACCESS数据库文件,命名为“shujuku.mdb”,并在其中新建数据表,命名为“shujubiao”。数据表中字段名称、字段类型和字段内容如下图所示。示例的数据库可以在最后下载,下载后请保存起来,因为我以后的讲解都会用到它。

然后在数据库同文件夹下建立一个操作数据库的ASP文件,命名为“caozuo.asp”,并输入以下代码:

<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立一个数据库链接对象   
lianjie = Server.CreateObject("ADODB.Connection");
//用已经建立的数据库链接对象打开数据库
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//创建一个“记录集”,即“Recordset”,它的任务是储存从数据库里提取出来的数据
rs = Server.CreateObject("ADODB.Recordset");
//创建查询数据库的SQL语句,这里将查出“shujubiao”中的所有数据
sql="select * from shujubiao";
//执行数据库查询,最后的数字参数主要用来指定打开和查询数据库的方式,有兴趣可以百度一下
rs.Open(sql, lianjie, 3);
%>

说明:上面的代码,除了SQL语句外,每个ASP文件差不多都是类似的,主要用来初始和查询数据。数据是提出来了,但如果你想要按自己方式使用它们,还是要借助JS脚本来实现。另外这里要着重说一下SQL,SQL是专门用来查询数据库的语言,它可以按指定的规则查询数据库中指定的表和字段,功能强大,却又非常容易理解,基本可以从字面意思猜出其功能来,这一节的最后我会仔细讲一下常用的SQL语句。

现在先回到我们的ASP中,继续在“caozuo.asp”中追加以下代码:

<%
//当前显示的页数,这里设置为第一页
var dangqianye=1;
//每页显示的记录条数,这里设置为5条
var meiyejilu=5;
//获取记录总条数
var zongtiaoshu=rs.RecordCount;
//设置每页显示的记录条数
rs.PageSize=meiyejilu;
//设置当前显示的页码
rs.AbsolutePage=dangqianye;
//获取总页数
var zongyeshu=rs.PageCount;
//输出总页数、总条数、每页记录条数以及当前页码
Response.Write("总条数为:"+zongtiaoshu+"<br>总页数为:"+zongyeshu+"<br>每页记录条数:"+meiyejilu+"<br>当前页:"+dangqianye+"<br>");
%>

说明:先在IIS下运行一下,你会看到网页上显示:

总条数为:13
总页数为:3
每页记录条数:5
当前页:1

有兴趣的朋友可以自己修改一下“meiyejilu”的值,然后再运行看看它和总页数存在什么关系,相信聪明的你一定能找到其中的规律:)注意,这里我一直在用“rs”,在第一段举例的代码中我已经注释过了,“rs”是“Recordset”对象的一个实例,我们从数据库里查询出来的数据都会储存在这个实例中,我们之所以这么做,是因为“Recordset”对象有很多属性和方法,方便我们使用,比如这里的“PageSize”和“AbsolutePage”。

光显示条数和页数没什么太大意义,我们要的是记录中的内容,好的,现在继续追加以下代码:

<%
//声明一个变量用来存储要输出的内容,初始为空
var shuchuneirong="";
//利用循环显示一页的所有内容,具体的页码在第二段代码的“rs.AbsolutePage”中指定了
for (i=0;i<meiyejilu;i++){
  //if的作用下面再进行说明
  if(!rs.EOF){
  //获取字段内容
  var xuhao=rs("xuhao");
  var xingming=rs("xingming");
  var yuwen=rs("yuwen");
  var shuxue=rs("shuxue");
  //一次循环将获得一条记录的所有内容,然后把这条记录追加到变量“shuchuneirong”中,这样循环结束的时候,它将储存本页所有的记录内容
  shuchuneirong =shuchuneirong+"<br>序号:"+ xuhao +" | 姓名:"+xingming+" | 语文:"+yuwen+" | 数学:"+shuxue;
  //本次循环结束后,将记录集指定到下一条记录
  //上面的if判断将在这里发挥作用,当我们显示最后一页的时候,剩余的记录数很可能小于设定的每页记录数
  //如果不加判断,rs就很有可能溢出界限,从而导致错误
  rs.MoveNext();
  }
}
//在网页中按指定格式输出本页所有的记录内容
Response.Write(shuchuneirong);
//关闭记录集对象
rs.Close();
//关闭连接对象
lianjie.Close();
%>

说明:啥都不说了,保存并运行吧,我们会在网页中看到下面的输出内容:

然后我们可以修改一下“dangqianye”,只要“当前页”小于等于“总页数”,就能正确显示本页的内容。其实现在很多FLASH留言本中的分页就是用的这一原理,只不过到时候我们不可能像现在这样手动修改“AbsolutePage”的值,我们需要从FLASH传递页码值,然后在ASP中接收并赋值给“AbsolutePage”。哈哈!现在你是不是有点跃跃欲试了?先别急,因为我还有一招入室绝学没传你呢,这套绝学就是那威震武林的SQL。

说练就练,但为了激发同学们学习的主动性,下面我仅给出做一个简易留言本必备的SQL语句:

1,查询语句
语法:select 字段名 from 数据表名 where 查询条件 order by 排列方式 (不加desc从低到高排序,加上相反)
举例:仅查询“shujubiao”表中“xuhao”,“xingming”两个字段,并且“xuhao”要大于3,结果按“xuhao”倒序排列:
SQL语句:select xuhao,xingming from shujubiao where xuhao>3 order by xuhao desc

2,删除记录
语法:delete from 数据表 where 条件
举例:删除“xingming”为“小布什”的记录:
SQL语句:delete from shujubiao where xingming='小布什'

3,添加记录
语法:insert into 数据表 (字段名) values (字段值)
举例:插入一条新记录,“xingming”为“火山”,“yuwen”为“100”,“shuxue”是“1000”:
SQL语句:insert into shujubiao (xingming, yuwen, shuxue) values ('火山',100,1000)
说明:“xuhao”字段为“自动编号类型”,不需要赋值。

4,更新记录
语法:update 数据表 set 字段值=新值 where 条件
举例:把“xuhao”为“1”的记录中“xingming”字段改为“寂寞火山”,“yuwen”字段改为“200”
SQL语句:update shujubiao set xingming='寂寞火山',yuwen=200 where xuhao=1

有了以上四大护法,打败FLASH留言板足够了,建议大家亲自动手把我写的例句放在“caozuo.asp”中实验一下,直观的体验一下效果。测试时,刷新页面后你可能会看到页面报错,没有关系,这并不影响SQL的执行,这时你可以关闭数据表再打开就可以直接在数据库中会看到效果了。只有第一个例子必须改动一下ASP代码,需要改那里才能使页面正常显示呢?嘿嘿,这个当大家的小作业了,注意看页面的错误提示哦:)

下星期就要生产实习了,一下就是三个星期,一定要赶在实习前完工,呼呼~~
其实讲到这里,你完全应该可以按着“LV与ASP通讯原理”一节中讲的方法,自己想办法把这节中在网页里显示的内容传递到FLASH里显示了,善于学习的朋友不妨自己先动手试一下,看能做到什么程度:)

总条数为:13
总页数为:3
每页记录条数:5
当前页:1

序号:1 | 姓名:周星驰 | 语文:50 | 数学:72
序号:2 | 姓名:丘淑贞 | 语文:450 | 数学:100
序号:3 | 姓名:舒淇 | 语文:1000 | 数学:2000
序号:4 | 姓名:刘德华 | 语文:200 | 数学:1000
序号:5 | 姓名:小布什 | 语文:500 | 数学:501

经过前两节的学习,我们已经熟悉了LV类的使用,以及ASP的基本格式和输入输出了。现在我们就来看看这两样东西是怎么融合到一起的。还记得我在讲LV类的基本知识时所举的TXT那个例子吗?LV与TXT通讯时,TXT中的数据需要写成“变量/值”配对的格式,其实必须写成这种格式并不是由TXT决定的,它是由LV的特性决定的,也就是说,LV与文本文件通讯需要“变量/值”这种数据格式。ASP文件其实也是文本文件,ASP与LV进行通讯的时候,它所输出的内容格式也就必须遵循“变量/值”配对的规则。

好吧,让我们从代码中来一个直观的体验吧,我们还用“★LV类基础讲解”那一节中举的那个传递多个变量的例子,还记得那个TXT文件的名字吧:“lv_shiyan.txt”,好的,现在我们直接把“lv_shiyan.txt”改成“lv_shiyan.asp”,同样把“lv_shiyan.fla”代码中shiyan_lv.load("lv_shiyan.txt")这句里的lv_shiyan.txt也替换为lv_shiyan.asp,然后直接在FLASH编辑环境中按Ctrl+Enter测试影片,我们发现输出窗口输出:“战胜LoadVar类!/战胜ASP!/我能做FLASH留言板了!”,跟修改之前一样。
昏!这样也可以!?这算什么?是FLASH与ASP的通讯吗?怎么不需要IIS都行?那是FLASH与TXT通讯吗?可人家的后缀名明明是“.asp”嘛!?其实这里火山也不是很明白,但我更偏向于把它理解成FLASH与ASP的通讯,只是因为这个ASP文件中没有ASP语句,不需要IIS支持就能显示内容而已。如果你非要讨个说法,最保守的回答是:FLASH与文本文件的通讯:)

呵呵:)好了,不忽悠大家了。上面那一段搞不清楚没关系,其实我从TXT过渡到ASP的目的还是想更直观的告诉大家:FLASH显示ASP中的内容跟TXT是一致的。只要我们想办法把ASP输出的数据格式捣鼓成“变量/值”配对就行了!

在TXT中又绕了这么长时间,大家着急了吧,好的,现在我要玩真的了,ASP正式登场:
首先我们把“lv_shiyan.asp”中的内容改成如下形式:

★LV与ASP通讯原理<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
Response.Write("&neirong1_txt=战胜LoadVar类!&neirong2_txt=战胜ASP!&neirong3_txt=我能做FLASH留言板了!&");
%>

我们先在IIS下运行一下,网页中会显示如下内容:

★LV与ASP通讯原理
&neirong1_txt=战胜LoadVar类!&neirong2_txt=战胜ASP!&neirong3_txt=我能做FLASH留言板了!&

恩!?怎么那么眼熟啊,恭喜你,答对了,这不正是“lv_shiyan.txt”中的内容嘛!只不过“★”后的标题换成这节的标题了:)好的,那么,聪明的你,现在是否已经预料到我下一步想干什么呢?恭喜你,你又答对了,你怎么那么聪明呢,下一步当然就是在FLASH中显示这些数据拉。说干就干,回到“lv_shiyan.fla”的编辑环境中,再次按Ctrl+Enter测试影片。哈哈,成功了!输出窗口显示:“战胜LoadVar类!/战胜ASP!/我能做FLASH留言板了!”,哈哈哈哈——哎!说你呢,你笑什么?我高兴是因为我终于又把你忽悠了,你笑什么呢?看看我们的“lv_shiyan.asp”文件,我们明明已经写了ASP语句了啊,可怎么还是不需要IIS支持就能直接在FLASH编辑环境中显示呢?难道我们的FLASH软件是在IIS下运行的吗?这当然不可能,那到底怎么会事啊?嘿嘿:)好了,不头痛大家了,其实,在我们第一次把“lv_shiyan.txt”直接改成“lv_shiyan.asp”并运行影片测试的时候,“lv_shiyan.asp”中的数据已经被读入内存,后来尽管我们又把“lv_shiyan.asp”中的内容改成了ASP特有的输出格式,但由于文件名字没改变,运行影片测试的时候,FLASH还是会直接从内存中提取已经存储过的内容,而上次的内容正好不需要IIS就能显示,碰巧而已:)

那如何显示新内容呢?我们只需要利用随机函数给ASP传递一个没有实际意义的变量就可以了。我们可以把加载ASP的语句改成下面的样子:

shiyan_lv.load("lv_shiyan.asp?bianliang="+random(9999));

现在再次在FLASH中测试影片,发现输出窗口显示以下提示:

加载失败
Error opening URL "file:///E|/flashlianxi/flash与asp练习/FLASH与ASP通讯入门级教程/lv_shiyan.asp?bianliang=5624"

恩!?又有问题了,不是说“bianliang”没有实际意义吗?怎么会导致“Error opening URL”呢?呵呵:)其实这里说的“没有实际意义”是针对ASP来说的,更确切的说,是针对浏览器的,还记得我在“★ASP中基本的输入输出”一节中讲的GET传递方式吗?如果忘了一会儿可以回去复习下。其实我的建议是你先跟着我的进度把每节彻底弄明白,等我写完后,再通读一边,然后你就完全可以自己动手做个留言板了。接上面的,既然这个“没有实际意义”不是针对FLASH的,那FLASH肯定就不认识了,它会把“lv_shiyan.asp?bianliang=5624”全部当成文件名,所以当然找不到这个文件了。

是该拨开云雾见晴天的时候了。现在我们先在“lv_shiyan.fla”中添加一个动态文本域,并命名为“wenben_txt”,然后把输出代码改动一下,让本来在输出窗口显示的内容显示在动态文本域里,具体改动是把下面第一行代码换成第二行:
trace("您载入的文本内容是:"+neirong1+"/"+neirong2+"/"+neirong3);
wenben_txt.text = neirong1+"/"+neirong2+"/"+neirong3;
好了,最后再发布“lv_shiyan.swf”和“lv_shiyan.html”到与ASP文件相同的文件夹下,并在IIS下运行“lv_shiyan.html”,你会看到SWF的动态文本域里显示“战胜LoadVar类!/战胜ASP!/我能做FLASH留言板了!”,现在你终于可以放心的欢呼了:我们终于可以把ASP输出的内容显示在FLASH里了,哈哈……。

先喝口水吧,一眨眼快两个小时了,我怎么写的那么慢啊,加油加油!上面讲的其实是ASP怎么向FLASH传递资料,这不是真正意义上的交互,交互是双方互动的,现在我们就来看看FLASH怎么向ASP传递资料。在此之前请保证你还记得我在“★ASP中基本的输入输出”一节中讲的ASP是怎么接收一个变量的,我们还用那一节所用的“asp_jichu.asp”文件,当时我是通过GET方式直接在浏览器地址栏中对“neirong_wangzhi”进行赋值的,并且测试证明ASP确实通过Request接收到了这个变量的值。现在我们就是要让FLASH做地址栏做的事,我们要通过FLASH对“neirong_wangzhi”进行赋值。

在正式开始之前,我们还有以下工作要完成

1,在“lv_shiyan.fla”中再添加一个按钮,命名为“tijiao_btn”。
2,把“wenben_txt”这个动态文本域改成输入文本域,取消HTML输出,并更名为:“shuru_txt”。
3,再添加一个动态文本域,用来接收从ASP传回的资料,命名为:“shuchu_txt”。
4,把“asp_jichu.asp”中的内容改成下面的内容:
★ASP中基本的输入输出<br>
<
%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//获取从FLASH传递过来的变量
neirong=Request("neirong_flash");
//输出要返回到FLASH中的内容
Response.Write("&fanhui_asp=哈,你输入的内容已经传递给ASP,并且又已经从ASP返回到FLASH了,你输入的内容是:"+neirong);
%>

5,最后把“lv_shiyan.fla”中的代码改成下面的内容:
System.useCodepage = true;
var shiyan_lv = new LoadVars();
tijiao_btn.onRelease = function() {
  //获得输入的文本内容,并把这个内容记录在变量“neirong_flash”中
  //这里相当于已经对变量“neirong_flash”进行了赋值
  shiyan_lv.neirong_flash = shuru_txt.text;
  //将LV对象中储存的所有变量都传递给ASP,不过这里我们只设定了一个,就是我们的“neirong_flash”
  //向ASP传递成功后,我们再把从ASP传递回来的变量还储存在“shiyan_lv”对象中
  shiyan_lv.sendAndLoad("asp_jichu.asp?bianliang="+random(9999), shiyan_lv, "post");
};
shiyan_lv.onLoad = function(chenggong) {
  if (chenggong) {
    //输出文本内容
    shuchu_txt.text = shiyan_lv.fanhui_asp;
  } else {
    //输出文本内容
    shuchu_txt.text = "加载失败";
  }
};

呼呼,改的东西真不少啊,先不讲代码了,直接发布测试一下吧,先有个直观的认识:在输入文本框中输入“我要做FLASH留言板”,然后点击提交按钮,你就会看到在动态文本框“shuchu_txt”中马上就会显示:“哈,你输入的内容已经传递给ASP,并且又已经从ASP返回到FLASH了,你输入的内容是:我要做FLASH留言板”。这个例子的源文件也可以直接在下面下载。

小提示:如果你在浏览器中直接点击刷新不能正确显示更新后的页面和内容,请按如下方式设置IE浏览器:→工具→Internet选项→设置→钩选“每次访问此页时检查”。这样我们以后就可以直接利用刷新来测试,不用再担心IIS刷新和内存问题了。

最后我们来对测试过程中的数据流程做一个系统的分析

  • 用户在FLASH的输入文本框“shuru_txt”输入“我要做FLASH留言板”
  • 通过“shiyan_lv.neirong_flash = shuru_txt.text;”这句代码把用户输入的内容储存在“shiyan_lv”对象的“neirong_flash”
  • 通过“shiyan_lv”对象的“sendAndLoad”方法将它记录的变量都传递给指定的ASP文件
  • 在ASP文件中通过“neirong=Request("neirong_flash");”这句代码获得从FLASH的“shiyan_lv”对象传递过来的变量“neirong_flash”
  • ASP接收变量内容后调用Response对象的Write方法利用传递过来的变量内容以“变量/值”配对的格式输出需要返回FLASH的新内容
  • FLASH在调用“shiyan_lv”对象的“sendAndLoad”方法发送变量时就已经指定“shiyan_lv”本身接收返回的内容
  • “shiyan_lv”接收到新返回的内容,并根据其“变量/值”配对的格式,将新内容储存在“shiyan_lv.fanhui_asp”中
  • 当新返回的内容在FLASH中加载完成后,调用“shiyan_lv”对象的onLoad事件
  • 通过“shuchu_txt.text = shiyan_lv.fanhui_asp;”这句代码在输出文本框中显示新返回的内容
    经过这个分析,相信大家应该可以从总体上有一个理性的认识了吧。

最后还需要重点强调的几点是

  • LV对象在调用“sendAndLoad”方法发送变量的时候,会把LV对象中储存的所有变量都发送给ASP。
  • ASP在接收LV对象传递过来的变量时,只需要在Request中使用与FLASH中相同的变量名字就可以了。
  • ASP输出的资料一定要使用“变量/值”配对的格式,因为只有输出成这种格式,FLASH才能像处理TXT一样将ASP输出的资料分别记录在几个变量并保存在指定接收资料的LV对象中。
  • 如果我们想向FLASH传递两个或者更多变量,我们可以在FLASH中这样写:(以传递三个变量为例)
    shiyan_lv.bianliang1_flash="bianliang1";
    shiyan_lv.bianliang2_flash="bianliang2";
    shiyan_lv.bianliang3_flash="bianliang3";
    shiyan_lv.sendAndLoad("asp_jichu.asp?bianliang="+random(9999), shiyan_lv, "post");
  • 传递大量资料时,必须使用POST方法。
  • 如果我们想在FLASH中接收到多个从FLASH传递过来的变量,就按TXT的处理方式来就OK了。

呼呼,喘口气,这一节终于写完了。本来计划下次直接写“LV与ASP综合运用”的,但现在想想,还是很有必要加上一节“ASP操作数据库入门”,请继续关注。有什么好的意见也可以提一下,希望通过大家的共同努力让这篇教程能让菜鸟以最快的速度,最少的障碍自己制作出真正属于自己的FLASH留言板。

还记得我们向ASP传递的那个无意义的变量“bianliang”吗?既然我们向ASP传递了,那ASP就应该能接收的到,有兴趣的朋友可以在“asp_jichu.asp”中加一个接收变量的语句,测试一下效果。改动后的ASP代码如下:

★ASP中基本的输入输出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
var canshu;
//获取网址中变量的内容
neirong=Request("neirong_flash");
//获取无意义的参数
canshu=Request("bianliang");
//显示变量内容
Response.Write("&fanhui_asp=哈,你输入的内容已经传递给ASP,并且又已经从ASP返回到FLASH了,你输入的内容是:"+neirong+"。你传递的无意义的参数是:"+canshu);
%>

测试后发现真的可以接收到一个数字呢,而且每次点提交这个数字几乎都不一样,在0-9999之间变化。看来我们确实接收到FLASH传递过来的随机变量了,可传递的时候,地址栏里怎么没显示呢?是因为这次我们采用了“POST”传递方式,这种方式用来传递大量资料,是不会在地址栏中显示变量和它的值的。

FLASH与ASP通信原理入门相关推荐

  1. [转]FLASH与ASP通信入门教程

    ★经常有人问我FLASH留言板的制作方法,无奈这东西一句两句没办法说清楚,于是就萌发了写教程的想法.可后来又一想,授人以鱼,不如授人以渔,还不如集中精力好好讲将FLASH与ASP的通讯原理,原理通了, ...

  2. FLASH与ASP通信入门教程(四) ASP操作数据库入门

    经过前几节的学习,我们对LV类和ASP的输入输出应该已经很熟练了吧,而且我们也已经了解了LV与ASP通讯的基本原理.这个原理可能并不复杂,不过如果你想利用它做出点东西来,关键还是要看你ASP和FLAS ...

  3. LV与ASP通讯原理

    ★LV与ASP通讯原理 →经过前两节的学习,我们已经熟悉了LV类的使用,以及ASP的基本格式和输入输出了.现在我们就来看看这两样东西是怎么融合到一起的.还记得我在讲LV类的基本知识时所举的TXT那个例 ...

  4. 两个简单的Demo示例向读者展示Flash和ASP.NET交互原理以及过程

    ASP.NET与FLASH交互学习了ASP.NET的基础知识之后,终于等到学习交互的时候了.请大家和我一起来进行让人激动的交互吧!本章我将用两个简单的Demo示例向读者展示Flash和ASP.NET交 ...

  5. 每天学一点flash(11) as3.0 与asp 通信 (1)

    经过几次的尝试啊,今天终于实现了as3.0与asp通信.我用access做了一个最简单的测试其目的就是调试代码方便.好现在开始吧 首先:必须准备asp 与access文件,而且要先用代码连接上acce ...

  6. HwBinder入门篇-Android10.0 HwBinder通信原理(一)

    摘要:本节主要来讲解Android10.0 HwBinder的通信原理概要 阅读本文大约需要花费18分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平 ...

  7. Android10.0 Binder通信原理(二)-Binder入门篇

    摘要:本节主要来讲解Android10.0 Binder的设计原理,如何设计一个Binder通信 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分 ...

  8. 通信原理经典书籍整理暨入门指导以及资料奉送

    写在前面: 我的微信公众号: xiaoshi_IC,小石谈IC,近期已完成了PCB系列,后续后续会逐步完成 IC版图,FPGA设计,信号完整性,IC设计,通信原理系列,做开源的微电子,电子公众分享,坚 ...

  9. HwBinder原理总结-Android10.0 HwBinder通信原理(十一)

    摘要:本节主要来进行Android10.0 HwBinder的原理总结 阅读本文大约需要花费14分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设 ...

最新文章

  1. 2020牛客多校第3场:Two Matchings[找规律+dp]
  2. Maven Filter
  3. 内部链接和外部链接【转】
  4. html 未来元素绑定事件,jquery on如何给未来元素绑定事件?
  5. SpringCloud的版本
  6. 对象后加一个值 php_PHP 对象使用
  7. node-webkit学习(1)hello world
  8. 浏览器和驱动版本对应关系
  9. Python3常用字符串操作
  10. 《Adobe Photoshop CS6中文版经典教程(彩色版)》—第1课1.4节在Photoshop中还原操作...
  11. javaMail发送邮件设置发件人中文昵称
  12. matlab函数sinh,matlab sinh 使用方法
  13. 最好的UI/UE设计资源网站推荐-免费的头像库
  14. mui android 模拟器,MUI框架-07-HBuilder+夜神安卓模拟器
  15. C++ setw() 函数
  16. php 显示连接数据库失败,php数据库连接失败的原因及解决办法
  17. roundcube db.inc.php,roundcube 邮箱 用户不能修改密码
  18. 牛客java选择题每日打卡Day12
  19. Ubuntu14.10 更新源
  20. 【Excel 教程系列第 16 篇】打印 Excel 表格时,如何设置每页都有表头

热门文章

  1. 同一个SqlHelper链接不同的数据库
  2. Django BoundField
  3. 手把手教你开发stm32——看门狗(基于hal库)
  4. codevs天梯四色问题
  5. 惊人!截至6月10日全球COVID-19疫情玫瑰图,这些国家最危险
  6. Iris+Redis实战项目应用
  7. 2018ap计算机考试时间,ap2018年考试时间是什么时候
  8. SMC 产品带有SIL认证的型号
  9. access open 知乎_如何评价开放获取期刊(Open Access)日渐盛行这一现象?
  10. 趣图:等等,我还没备份呢