| |
|
|
计数器
一、关于计数器 计数器,就是当你打开一个web页面时,该页面会调用一段相关程序,使一组数字自动加1。 如果你有个人主页,想必你一定会在首页上安装一个计数器,计数器的动态数据,对于浏览者及网站主人都是一个不可或缺的信息,它的意义是众所周知的。 纵观整个网络世界,几乎找不到没有计数器的首页,有的甚至在分页及某些具体的项目上也设有计数功能,那么这些计数器是如何得到的呢? 大致有以下几种: 1、申请计数器 这大概是个人网站最普遍的解决方案了,只要你在搜索引擎内键入“计数器”关键词,你就会找到大量的计数器提供网站,而且都是免费的。但是,这种方式是不是有种“寄人篱下”的感觉,有的还不能设置初值及不能安放在二个页面上等限制,令人不能接受的是计数器运行不稳定,速度慢,更糟糕的是它说没就没了。 2、付费空间附加计数器 你一旦购买了一个付费空间,供应商一般会附加提供一个计数器,这种计数器需要你按照他们的指定步骤自行安装,运行速度快、稳定,有一定的加工装饰余地。 3、自己制造计数器 这大概是每位站长梦寐以求的方式了,计数器自己做,不仅使你的网络作品全面“私有化”,而且还可以彻头彻尾地进行个性化构思,使其不限于计数功能,兼有极强的观赏性及装饰性,甚至实现动画计数,使你的页面锦上添花! 本讲的目标就是让所有在座朋友拥有自己的计数器,并且不是司空见惯的文本或者gif图像计算器,它是目前还较罕见的flash动画计数器,让你放心的是,本动画计数器不涉及数据库! 要实现这一目标,唯一的要求就是一个能支持ASP的空间! 我们知道,支持ASP的空间,目前几乎已经成为网络空间的标准,许多免费空间也不例外,如果你实在不知道自己空间的技术信息,你可以把某个HTML文件改为asp扩展名,运行正常就OK了。 二、动态数据基础 上一节已经说了,打开页面,或者刷新,计数器自动加1,这就是“动态数据”,早期的网站,几乎全是静态页面,网络发展到今天,一个网站如果没有动态数据,那么显然是不合时宜了,留言板、自动链接、论坛、站内BB机、新闻系统、自动文件系统、自动下载、上传系统乃至商务系统均由“动态数据”支撑,而计数器仅是其最基本最实用的一种。 有朋友问了,在网页中我能用Js、VBs等设置变量,也能实现动态数据,另外,在flash中我能用“动态文本”进行自动计数,这不就是动态数据吗! 错了!“动态数据”的一个基本要素就是能存储、更新,能进行维护等操作。 网页语言已经相当强大,Flash中的AS编程几乎无所不能,实现“交互”动画易如反掌,但是它们却不能实现计数器功能,原因就是它们没有维护动态数据的能力! 动态数据的维护一般在服务器端进行,数据的存取必需借助于某种程序语言,比如CGI、PHP、ASP等,就计数器而言,当包含计数器程序的页面打开或刷新时,该程序向服务器发出请求,服务器端根据扩展名ASP及页面中的特殊标签“<%...%>”调用ASP.DLL等程序解释并执行网页中的程序,然后把结果返回用户浏览器。 由于计数器的数据极其简单,我在本例中采用了文本文件,基本工作流程是: ASP程序读取文本文件中的原始数据,然后加1,向网络发出新数据后更新存盘,flash取得数据后显示在场景中。 三、最基本的制作过程 1、创建数据文件 用记事本创建一个新文档,键入“1”,然后保存为count.txt,这一步就完成了。 2、创建ASP文档 我注意到,“启航”已经开设了几次ASP基础课程,由于本例不涉及数据库,所以这一步内容显得简单多了,如果朋友们对数据库链接以及ASP其它方面的知识有兴趣,可参阅我另外两篇学习文档: (相关链接见页头) 下面是本例的第2个文档count.asp的全部内容及注解: <% Dim count Set Fs=Server.CreateObject("Scripting.FileSystemObject") '创建一个新文本文件对象FS file_path=Server.MapPath("counter.txt") '设置文本数据打开路径,保存在File_path中 Set CounterFile=Fs.OpenTextFile(file_path) '用该路径打开这个文件,实例名为CounterFile OldCounterValue=CounterFile.ReadLine '读取原始数据并赋予变量“老数据值” NewCounterValue=OldCounterValue+1 '老数据值+1后赋予“新数据值” Response.Write("count="&NewCounterValue) '向WEB页面发送新数据值,注意变量表示格式 CounterFile.Close '关闭文本文件 Set CounterFile=Fs.OpenTextFile(file_path,2) '再次打开文本文件,参数2为复盖原文件 CounterFile.WriteLine(NewCounterValue) '用新数据值更新文本文件 CounterFile.Close '关闭文件实例,释放资源 %> ASP提供了相当丰富的文本文件操作命令,以上用红色显示的“关键词”就是ASP的脚本,在讲解时会作一些解释,你只需拷贝以上代码,保存为count.asp,这一步就完成了。 脚本中使用了一组ASP的“文件操作组件”,其中可能对你陌生的脚本有以下几条: ·Server.CreateObject("Scripting.FileSystemObject")'创建一个文件操作实例 ·MyFile.OpenTextFile("文本文件.txt") '打开一个文本文件 ·MyTextFile.ReadLine '读取文本文件中的某一行 ·MyTextFile.WriteLine(string) '向文件中写入字符串并加入换行符 代码中的其它就是变量或者值,分清这二个类型,程序很易读懂了。 注意,本程序运行后会向网络发送一个变量及值:count=xxx,以供flash读取显示。 3、Flash读取数据 请你再注意,flash读取外部变量必需遵守“MIME”格式标准,(它是一种 CGI 脚本使用的标准格式),“启航”以前也多次涉及这个问题,当我们要读取外部数据时,外部格式必需是“变量=值”,获取多个值,就得用“&”连接。 例如,下面的语句能使flash得到3个数据: hslk1=1&hslk2=2&hslk3=3 当然,你得在flash中定义三个动态文本对象,它们的变量名分别为hslk1、hslk2、hslk3。 这就是为什么在ASP中向网络发送数据时用Response.Write("count="&NewCounterValue)语句的道理!
那么,flash如何读取呢?这难不倒“启航”人,大家知道: 只能是loadVariables(),这个函数完整语法如下: loadVariables("url" ,level/"target"[, variables]) 其中“url”是外部数据文件所处位置的绝对或相对路径。 “level”指定接收这些变量的级别的整数。如果你是用flashMX,当将变量加载到级别时,在标准模式下,“动作”面板中的该动作变成: “loadVariablesNum”,在专家模式下,您必须指定 loadVariables或loadVariablesNum。 笔者按:对于“loadVariables”和“loadVariablesNum”至今分不清楚的朋友请注意上述描述,实际上使用效果是一样的! “target”指向接收所加载变量的影片剪辑的目标路径。您只能指定“target”影片剪辑或level(级别)这两者之一;而不能同时指定这两者。 “variables”是一个可选参数,指定发送变量所使用的 HTTP 方法。该参数必须是字符串 GET 或 POST。如果没有要发送的变量,则省略此参数。GET 方法将变量追加到 URL 的末尾,该方法用于发送少量变量。POST 方法在单独的 HTTP 标头中发送变量,该方法用于发送长的变量字符串。以上描述是我在flash帮助中查到的。 根据上述描述,本例计数器应该使用“get”方式,而“post”被大量用在flash论坛、留言板等需要传递整个数据表或字段的场合。
其实,Flash和Asp交换信息的原理就是页面之间的数据交换。 Flash与Asp的通讯也是使用“Http协议”,其请求格式为“http://ip地址?变量1=值1&变量2=值2&变量3=值3”,举例说,当我们的flssh中有三个动态文本对象,它们的变量名分别是hslk1、hslk2、hslk3,它们的值分别是A、B、C,当你想与hslk.asp交换信息时可以写成: loadVariables("hslk.asp","","get"),提交后,实际上flash发出了如下的web请求: http://www.hslk.com/hslk.asp?hslk1=a&hslk2=b&hslk3=c 具体书写时,可以写成: loadVariables("hslk.asp","","get") 也可以这样写: loadVariables ("http://www.hslk.com/hslk.asp?hslk1=a&hslk2=b&hslk3=c" ,0, “GET”) 这就是一个完整的请求,前者是一般写法,后者是“显式”的web请求。
OK,根据上述原理,在我们的flash计数器第一帧写入以下代码: 第1帧: loadVariablesNum("count.asp?count=NewCounterValue", 0, "GET"); 这与以下写法是等同的: loadVariables("count.asp","","get")
如果这时你的count.txt文件中数字是“122”,那么flash获取的数据表达式是:count=123。 性急而且聪明的朋友已经知道,接下来只要再在场景中放一个“动态文本框”,其变量名为count,就能显示“123”! 不错,应该能够了,那么我们的计数器是不是算完成了? 确实OK了,这可以算一个计数器,如果你能容忍这个毫无特色的计数器,那么下面一讲不听也罢。
|
| |