Flash Empire快来看国内闪客的作品大赏……学习其他闪客的源文件,对每个闪客来说都是有意义的提供众多的您所需要的闪客资源国内人气最旺的 Flash 技术论坛 关于闪客帝国的所有的所有……
在线教程
 


用 Flash 制作留言板(上)

作者:边城浪子 flasher

原文件下载
  最近我把自己制作的一个 Flash 留言板放到了爬行榜上,引起了大家不小的兴趣,很多朋友纷纷要求提供原始代码,现在,大家已经可以下载到原始代码了,但是,我想,还是要配合一个教程好一些。

  (没有概念的朋友请看这个演示……点这里

  于是,抓紧时间,马上开始写。计划是分成两部分:一部分是ASP部分的分析,另一部分是在 Flash 中的操作。

  下面,我们先来看看数据是怎样经过ASP处理的。

  这个留言板一共有三个文件——Flash SWF 影片文件、ASP程序和留言板数据文件(文本文件)。

一、数据的排列方式

  由于实在没有什么特殊的要求,所以,没有必要使用数据库,只要把留言板的数据格式确定好就可以了,于是,我们确定如左边图显示的这种文本结构。在实际应用中,这个文件叫做 guest.txt。 

  这种结构很简单,第一条数据代表一共有多少条留言,中间部分就是内容,最后一个标记着文本文件的结束。

  我来具体解释一下:各个数据都以 & 号开头,因为这样 Flash 在读取的时候就会把它当成一个变量。现在“&total=2”被读入以后,Flash 就会把影片中的 total 设置成 2。

  中间部分也是一样,第一个留言的三个部分是 sub1 name1 text1,而第 n 个留言的三个部分就是 subn namen textn……

  最后的这个“&eof=true”好象意义不大,但是其实它主要是作为标志来用,当 Flash 在读取文件的时候,肯定要显示“正在读取中……”等内容,那么怎样才能判断是否已经完全读取了呢?当然是在“&eof=true”被读取以后(也就是在 Flash 中 eof = true),才算完成。这个时候,我们就可以告诉大家:“完成”了。否则,动画就会循环显示“正在读取中……”,直到完成。

二、ASP完成了什么

  那么,就该我们的ASP程序了,其实它完成的是最基础的工作:读取和写入,其它的功能,比如显示、浏览方式等等都还是由 Flash 完成的。

  首先,参数要全部读取进来(这些数据应该是从 Flash 传来的)。
 
subject = request("sub")

name = request("name")
text = request("text")
action = request("action")

  先看它的读取功能。本来我们设置了 action=read 的时候去读 guest.txt,但是发现:

  (注意:值得注意)尽管在 Netscape 中已经通过了,可是在 IE 中我们却遇到了挫折,原本不应该受 Cache 左右的 asp 程序竟然不听使唤。每次用户发了新留言以后,死活也不给刷新了。没有办法,我们只得改变战术,在 Flash 中给了 action 一个随机的参数,才解决了这个问题。

  因此,您现在看到的程序是只要有不是“add”的参数就会去执行读的操作。
 
if (action <> "add") then

  set fin = Server.CreateObject("Scripting.FileSystemObject")
  filepath = Server.MapPath("guest.txt")
  set f = fin.OpenTextFile(filepath)
  (把文本文件 guest.txt 中所有数据读入 buf)
  buf = f.readAll
  (将所得结果全部返回给 Flash)
  response.write(buf)

  f.close
end if

  看见了,读取其实很容易,那么下面看写入的:

 
if (action = "add") then

  (先读取文件)
  set fin = Server.CreateObject("Scripting.FileSystemObject")
  filepath = Server.MapPath("guest.txt")
  set f = fin.OpenTextFile(filepath)

  (先读入第一行,因为第一行有总的个数)
  line = f.readline
  (将 &total=n 中的 n 提取出来,并转成整型)
  total = int(mid(line,8))

  (其余内容读入缓冲区)
  buf = f.readAll

  f.close

  set fout = Server.CreateObject("Scripting.FileSystemObject")

  (写文件之前先锁定)
  Application.lock

  filepath = Server.MapPath("guest.txt")
  set f = fout.CreateTextFile(filepath,TRUE)

  (总数添加一个)
  total = total + 1
  (将新数据写入文件)
  f.writeline "&total="&total
  f.writeline "&sub"&total&"="&subject
  f.writeline "&name"&total&"="&name
  f.writeline "&text"&total&"="&text
  (将缓冲区的老数据写回)
  f.write buf

  f.close

  (解开锁定)
  Application.unlock

  (返回成功写入的标志)
  response.write("&added=1")

end if

  相信有基础的闪客一定会很快就弄明白的。这里做一点说明:

  (1)buf 在这里很关键,它保存着目前留言板上的所有信息。我们要做的其实是:把老信息保留,然后添加入新的信息,再把老信息加在后面。就这样,不断的添加,生成大的留言板数据文件。这是程序的主要功能。

  (2)Application.Lock 和 Application.Unlock 是保护文件的方法,因为有可能出现大家一起读写一个文件的情况,会使数据丢失。使用它们就可以避免这种现象。

  (3)total = int(mid(line,8)) 是简单的 VB 语句,因为 line 读近来以后应该是“&total=12”或者“&total=71”什么的,我们需要的是 12 和 71,但是 Flash 需要“&total=xxx”,所以必须要这样做,使用 mid() 函数可以帮助我们得到“=”号后面的数据。int() 则把得到的字符型数据转换成整型,使之可以进行运算。

  好了,待续。下一部分将是 Flash 里面的手脚。哈哈!

下一部分

  有不明白可以去论坛提问,也可以写信给我

(完)

返回教程

闪客帝国版权所有 如要摘编请联系我们