LV与ASP通讯原理
★LV与ASP通讯原理
→好吧,让我们从代码中来一个直观的体验吧,我们还用“★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”中的内容改成如下形式:
<%@LANGUAGE="JAVASCRIPT"%>
<%
Response.Write("&neirong1_txt=战胜LoadVar类!&neirong2_txt=战胜ASP!&neirong3_txt=我能做FLASH留言板了!&");
%>
&neirong1_txt=战胜LoadVar类!&neirong2_txt=战胜ASP!&neirong3_txt=我能做FLASH留言板了!&
那如何显示新内容呢?我们只需要利用随机函数给ASP传递一个没有实际意义的变量就可以了。我们可以把加载ASP的语句改成下面的样子:
Error opening URL "file:///E|/flashlianxi/flash与asp练习/FLASH与ASP通讯入门级教程/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”中的内容改成下面的内容:
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//获取从FLASH传递过来的变量
neirong=Request("neirong_flash");
//输出要返回到FLASH中的内容
Response.Write("&fanhui_asp=哈,你输入的内容已经传递给ASP,并且又已经从ASP返回到FLASH了,你输入的内容是:"+neirong);
%>
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 = "加载失败";
}
};
小提示:如果你在浏览器中直接点击刷新不能正确显示更新后的页面和内容,请按如下方式设置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代码如下:
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
var canshu;
//获取网址中变量的内容
neirong=Request("neirong_flash");
//获取无意义的参数
canshu=Request("bianliang");
//显示变量内容
Response.Write("&fanhui_asp=哈,你输入的内容已经传递给ASP,并且又已经从ASP返回到FLASH了,你输入的内容是:"+neirong+"。你传递的无意义的参数是:"+canshu);
%>
→首先我们需要建立一个ACCESS数据库文件,命名为“shujuku.mdb”,并在其中新建数据表,命名为“shujubiao”。数据表中字段名称、字段类型和字段内容如下图所示。示例的数据库可以在最后下载,下载后请保存起来,因为我以后的讲解都会用到它。
<%
//建立一个数据库链接对象
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);
%>
→现在先回到我们的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下运行一下,你会看到网页上显示:
总页数为: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();
%>
●说明:啥都不说了,保存并运行吧,我们会在网页中看到下面的输出内容:
总页数为:3
每页记录条数:5
当前页:1
序号:1 | 姓名:周星驰 | 语文:50 | 数学:72
序号:2 | 姓名:丘淑贞 | 语文:450 | 数学:100
序号:3 | 姓名:舒淇 | 语文:1000 | 数学:2000
序号:4 | 姓名:刘德华 | 语文:200 | 数学:1000
序号:5 | 姓名:小布什 | 语文:500 | 数学:501
→说练就练,但为了激发同学们学习的主动性,下面我仅给出做一个简易留言本必备的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里显示了,善于学习的朋友不妨自己先动手试一下,看能做到什么程度:)
LV与ASP通讯原理相关推荐
- FLASH与ASP通信原理入门
经常有人问我FLASH留言板的制作方法,无奈这东西一句两句没办法说清楚,于是就萌发了写教程的想法.可后来又一想,授人以鱼,不如授人以渔,还不如集中精力好好讲将FLASH与ASP的通讯原理,原理通了,具 ...
- ajax通讯原理,ajax通讯原理以及自己封装一个ajax函数
ajax通讯原理 要解释ajax的原理,需要从旧的交互方式开始,当用户触发一个http请求到服务器,服务器对其进行处理之后,再返回一个新的html页到客户端,每当服务器处理客户端提交的请求时,客户都只 ...
- (三)HTTP再邂逅--熟悉HTTP协议结构和通讯原理
HTTP再邂逅--熟悉HTTP协议结构和通讯原理 HTTP协议特点 URL和URI的区别和联系 HTTP报文结构分析 HTTP请求方法剖析 HTTP响应状态码拆解 用telnet分析http协议的通讯 ...
- 开源纯C#工控网关+组态软件(四)上下位机通讯原理
一. 网关的功能:承上启下 最近有点忙,更新慢了.感谢园友们给予的支持,现在github上已经有.目标是最好的开源组态,看来又近一步^^ 之前有提到网关是物联网的关键环节,它的作用就是承上启下. ...
- 网络工程师入门/底层通讯原理-李强强-专题视频课程
网络工程师入门/底层通讯原理-204人已学习 课程介绍 网络工程师是通过学习和训练,掌握网络技术的理论知识和操作技能的网络技术人员.网络工程师能够从事计算机信息系统的设计.建设.运行和 ...
- 38.CAN通讯原理与配置
CAN通讯原理与配置 参考资料 探索者STM32F407开发板 <STM32F4开发指南-库函数版本>--CAN通讯实验 CAN参考资料 <STM32中文参考手册_V10>-第 ...
- [TCP/IP] SSL的通讯原理
SSL:位于传输层和应用层之间,专门实现在传输之前加密,在接收端给应用层之前解密;使用非对称加密技术 SSL原理 1.客户端与服务端建立连接 2.互相Hello(包含支持的版本.算法:加上随机数) 3 ...
- 小牛485通讯原理_让你秒懂智能电表工作原理及抄表原理
一.智能电表的工作原理 1.智能电表主要是由电子元器件构成,其工作原理是先通过对用户供电电压和电流的实时采样,再采用专用的电能表集成电路,对采样电压和电流信号进行处理,并转换成与电能成正比的脉冲输出, ...
- HTTP协议扫盲(一)HTTP协议的基本概念和通讯原理
一.HTTP协议的概念 1.引子 - 从url开始 URL(Uniform Resource Locator) 地址用于描述一个网络上的资源, 基本格式如下 schema://host[:port# ...
最新文章
- TensorFlow Lattice:灵活、可控、可解释的机器学习
- RingtoneManager-获得系统当前的铃声
- python3手机脚本教学_python+adb命令实现自动刷视频脚本案例
- 【Magicodes.IE 2.0.0-beta1版本发布】已支持数据表格、列筛选器和Sheet拆分
- 梯度下降法优化目标函数_如何通过3个简单的步骤区分梯度下降目标函数
- linux下缓存命中测试,Linux 性能优化实战(倪朋飞)---查看缓存命中情况
- python骨灰技巧_Pandas技巧,某骨灰级Pythoner经验总结,呕心沥血!
- 计算机辅助应用的缩写有什么,计算机辅助设计的英文缩写是什么
- CCF	2018-3-1跳一跳
- CentOS6.0升级内核为6.2
- (6)ASP.NET Core 中使用IHttpClientFactory发出HTTP请求
- 音乐和计算机跨界融合,音乐类综艺跨界融合有了新思路
- 阿里P6、P7、P8、级别需要多少年的工作经验,还是因能力而定?
- 投影向量计算公式的推导
- 企业数据资产管理:数据资产目录应该如何规划
- 浅谈PPO算法-玩转月球登陆
- 一文带你了解SLB、F5、Nginx负载均衡
- 淘宝等各平台API接口,执行item_get - 获得商品详情信息
- 基于Python实现图片格式转换的小程序
- 俄罗斯方块源代码Github