??
字號:
作者:大木頭
日期:00-5-16 下午 01:01:23
用 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 里面的手腳。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -