FLASH與ASP通信入門教程——做真正屬于自己的留言本第5/5頁
LV與ASP綜合運(yùn)用(二)
接上節(jié),現(xiàn)在開始第三步:“刪除”功能:
在《ASP操作數(shù)據(jù)庫入門》一節(jié)的最后,我給出了刪除一條記錄的SQL語句,不知道大家當(dāng)時(shí)自己動手試驗(yàn)了沒。如果沒的話也沒有關(guān)系,現(xiàn)在就跟我一起在FLASH中實(shí)現(xiàn)這個(gè)功能吧。而且我將演示如何利用“zonghe.asp”一個(gè)后臺文件實(shí)現(xiàn)所有功能。
在看代碼之前,請大家先思考這樣一個(gè)問題,如果要?jiǎng)h除一條記錄的話,你依據(jù)什么刪除呢?依據(jù)“yuwen”成績可以嗎?打開我們的數(shù)據(jù)庫表可以看到“毛寧”,“鞏麗”和“李小龍”都是100分,如果我們刪除語文成績?yōu)?00的記錄,就會同時(shí)把這三個(gè)人的記錄都刪除了。為了避免發(fā)生這種情況,我們一般都依據(jù)數(shù)據(jù)類型為“自動編號”的字段,因?yàn)樽詣泳幪栕侄问墙^對不會重復(fù)的,比如這里的“xuhao”。
按照我的開發(fā)習(xí)慣,我們還是先來寫后臺,請?jiān)凇皕onghe.asp”寫如下代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立數(shù)據(jù)庫鏈接對象
lianjie = Server.CreateObject("ADODB.Connection");
//打開數(shù)據(jù)庫
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//創(chuàng)建“記錄集”
rs = Server.CreateObject("ADODB.Recordset");
//設(shè)置一個(gè)選項(xiàng)變量,根據(jù)這個(gè)選項(xiàng)的值,來決定執(zhí)行對應(yīng)功能的代碼,這個(gè)變量來自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>
<%
//——————根據(jù)變量“xuanxiang”決定調(diào)用對應(yīng)的函數(shù)
if(xuanxiang=="顯示"){
//查詢顯示記錄演示
xianshi();
}else if(xuanxiang=="刪除"){
//刪除記錄演示
shanchu();
}
%>
<%
//——————定義“顯示”的功能函數(shù)
function xianshi(){
//查詢的SQL語句
sql="select * from shujubiao order by xuhao desc";
//執(zhí)行數(shù)據(jù)庫查詢
rs.Open(sql, lianjie, 3);
//從FLASH接收當(dāng)前頁碼
var dangqianye=Request("dangqianye_flash");
//從FLASH接收每頁顯示的記錄條數(shù)
var meiyejilu=Request("meiyejilu_flash");
//聲明一個(gè)變量用來存儲要輸出的內(nèi)容,初始為空
var shuchuneirong="";
//設(shè)置每頁顯示的記錄條數(shù)
rs.PageSize=meiyejilu;
//設(shè)置當(dāng)前顯示的頁碼
rs.AbsolutePage=dangqianye;
//獲取記錄總條數(shù)
var zongtiaoshu=rs.RecordCount;
//獲取總頁數(shù)
var zongyeshu=rs.PageCount;
//利用循環(huán)顯示一頁的所有內(nèi)容,具體的頁碼在第二段代碼的“rs.AbsolutePage”中指定了
for (i=0;i<meiyejilu;i++){
if(!rs.EOF){
//獲取字段內(nèi)容
var xuhao=rs("xuhao");
var xingming=rs("xingming");
var yuwen=rs("yuwen");
var shuxue=rs("shuxue");
//將要顯示的內(nèi)容記錄在“shuchuneirong”中
shuchuneirong =shuchuneirong+"<br>序號:"+ xuhao +" | 姓名:"+xingming+" | 語文:"+yuwen+" | 數(shù)學(xué):"+shuxue;
rs.MoveNext();
}
}
//將查詢出來的內(nèi)容輸出成變量/值配對形式
Response.Write("&neirong_asp="+shuchuneirong);
//輸出總條數(shù)
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//輸出總頁數(shù)
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>
<%
//——————定義“刪除”的功能函數(shù)
function shanchu(){
//接收從FLASH傳遞過來的序號ID
var id=Request("xuhao_flash");
//刪除的SQL語句
sql="delete from shujubiao where xuhao="+id;
//執(zhí)行數(shù)據(jù)庫查詢
rs.Open(sql, lianjie, 3);
}
%>
說明:對比上一節(jié)給出的ASP代碼,眼尖的朋友一定會發(fā)現(xiàn)有幾處不同:
- 最后一段關(guān)閉連接的代碼沒了,為什么要?jiǎng)h除呢?這是為了在同一個(gè)ASP文件中多次利用一個(gè)連接對象和recordset對象。其實(shí)正規(guī)的寫法里,是不推薦這么做的,這里只是為了演示和講解方便,大家以后自己做留言本的時(shí)候,建議每個(gè)功能函數(shù)里都重新聲明連接對象和recordset對象,并在函數(shù)結(jié)尾關(guān)閉。
- 最后一段加了一個(gè)“shanchu”函數(shù),它接收從FLASH傳遞過來的記錄序號,并執(zhí)行刪除語句。
- 在第三段的功能邏輯代碼區(qū),調(diào)用“shanchu”函數(shù)。
- xianshi”函數(shù)中的SQL語句最后加了一段:“order by xuhao desc”,這是讓記錄按xuhao字段倒序排列,這個(gè)是為以后“添加”功能服務(wù)的,它可以讓最新添加的記錄顯示在最上邊,便于我們觀察。這里我們可以先不用理會它。
好的,后臺文件搞定了,現(xiàn)在回到FLASH中徹底完成我們的刪除功能吧:)
打開“zonghe.fla”,輸入下面的代碼:
//================系統(tǒng)初始化=================
//——————界面初始化
//編碼
System.useCodepage = true;
//——————變量初始化
//聲明一個(gè)“選項(xiàng)”變量,ASP中將根據(jù)這個(gè)變量決定當(dāng)前演示的是那項(xiàng)功能
//初始化這個(gè)變量為“顯示”,用來顯示記錄
var xuanxiang = "顯示";
//當(dāng)前頁初始為第1頁
var dangqianye = 1;
//每頁記錄數(shù)初始為5條
var meiyejilu = 5;
//——————數(shù)組初始化
//——————對象初始化
//LV對象,從上到下依次用于“顯示”,“刪除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================邏輯功能區(qū)==================
//——————顯示功能測試
xianshi();
//——————?jiǎng)h除功能測試
shanchu_btn.onRelease = function() {
shanchu();
};
//================函數(shù)模塊區(qū)==================
//——————“顯示”功能
function xianshi() {
//將選項(xiàng)設(shè)置為“顯示”
xuanxiang = "顯示";
//LV對象獲取“選項(xiàng)”內(nèi)容
xianshi_lv.xuanxiang_flash = xuanxiang;
//獲取“當(dāng)前頁”
xianshi_lv.dangqianye_flash = dangqianye;
//獲取“每頁記錄數(shù)”
xianshi_lv.meiyejilu_flash = meiyejilu;
//將以上獲取的內(nèi)容傳遞給FLASH
xianshi_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), xianshi_lv, "post");
//加載完成后顯示一系列相關(guān)信息
xianshi_lv.onLoad = function(chenggong) {
if (chenggong) {
//顯示當(dāng)前頁(直接從FLASH獲得)
dangqianye_txt.text = dangqianye;
//顯示每頁記錄數(shù)(直接從FLASH獲得)
meiyetiaoshu_txt.text = meiyejilu;
//顯示總條數(shù),總頁數(shù)和本頁的記錄內(nèi)容
zongtiaoshu_txt.text = xianshi_lv.zongtiaoshu_asp;
zongyeshu_txt.text = xianshi_lv.zongyeshu_asp;
neirong_txt.htmlText = xianshi_lv.neirong_asp;
} else {
neirong_txt.htmlText = "加載失敗!";
}
};
}
//——————“刪除”功能
function shanchu() {
//將“選項(xiàng)”設(shè)置為“刪除”
xuanxiang = "刪除";
//將設(shè)定為“刪除”的“選項(xiàng)”記錄在用于刪除的LV對象
shanchu_lv.xuanxiang_flash = xuanxiang;
//獲得要?jiǎng)h除的記錄序號也記錄在LV對象中
shanchu_lv.xuhao_flash = shanchuxuhao_txt.text;
shanchu_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), shanchu_lv, "post");
shanchu_lv.onLoad = function() {
//根據(jù)ASP傳回來的“成功”進(jìn)行對應(yīng)操作
if (shanchu_lv.chenggong_asp == "成功") {
shanchuxuhao_txt.text = "刪除成功";
//最后調(diào)用“顯示”函數(shù),在“neirong_txt”文本框中刷新內(nèi)容顯示
xianshi();
} else {
shanchuxuhao_txt.text = "刪除失敗";
}
};
}
說明:上面FLASH中的代碼我們可以對比著ASP中的代碼來看,ASP中添加了刪除功能,F(xiàn)LASH中最后一段便對應(yīng)的添加了一個(gè)“shanchu”函數(shù),這個(gè)函數(shù)中的代碼,相信大家現(xiàn)在參照著注釋應(yīng)該能夠理解了吧。然后是“功能邏輯區(qū)”通過“刪除”按鈕調(diào)用刪除函數(shù)。最后還有一點(diǎn)小小的改動,我在這里就不考察大家的眼力了,大家注意看,我在“xianshi”函數(shù)中的第一行添加了一句:xuanxiang="顯示"。這是為了讓“xianshi”函數(shù)更加獨(dú)立,在“shanchu”函數(shù)中,當(dāng)刪除完成后,我調(diào)用了“xianshi”函數(shù),以便讓大家在FLASH中及時(shí)看到刪除后的結(jié)果,如果“xianshi”中沒有定義“xuanxiang”,則在“shanchu”函數(shù)中調(diào)用“xianshi”函數(shù)時(shí),“xuanxiang”的值依然為“shanchu”,這樣ASP中的“xianshi”函數(shù)就無法獲得正確的參數(shù),而顯示刪除后的內(nèi)容了。
好的,說了那么多,激動人心的時(shí)刻到來了,讓我們在IIS下打開“zonghe.html”測試一下吧。剛打開你會看到正確的頁碼和內(nèi)容顯示,然后,你在刪除的輸入文本框中輸入“13”,按“刪除”按鈕,當(dāng)這個(gè)輸入文本框提示“刪除成功”后,你馬上會看到“記錄總數(shù)”由原來的13變成了12,內(nèi)容文本框中“xuhao”為13的記錄消失了。可憐的“趙微”就這樣被我們輕輕一點(diǎn)就淘汰出局了:)
經(jīng)過這次“刪除”功能的演示,相信大家已經(jīng)對我的思路和功能擴(kuò)展的方法有了一定的了解。下面我將一次性完成“添加”和“更新”功能演示!
第四步,“添加”和“更新”功能:
這一步我就不再貼代碼了,大家直接下載源文件看吧,因?yàn)閷?shí)在沒什么好講的了,這一步需要做的就是按著上一步的模式,分別在ASP和FLASH添加對應(yīng)的函數(shù)塊兒,然后再在“邏輯功能區(qū)”調(diào)用對應(yīng)的功能函數(shù)就行了。都說一個(gè)組織良好的程序一開始比較復(fù)雜,越往后寫反而越輕松,我想一篇好的教程也應(yīng)該一樣吧:)
★小總結(jié):這篇教程到這里核心內(nèi)容基本上講完了,一個(gè)FLASH留言本的基本功能也差不多都實(shí)現(xiàn)了,但想象和成品的距離其實(shí)是咫尺天涯,想做一個(gè)功能完善的FLASH留言本,遠(yuǎn)不止我講的這些內(nèi)容,這里面還有很多技巧和細(xì)節(jié),主要還是看你AS和ASP的基本功!反正捕魚的方法我是傾囊相授了,能不能捕到魚,還是要通過大家自己的實(shí)踐和努力。其實(shí)我留給大家的作業(yè)還是很多的,包括翻頁處理,管理登陸等等,但只要你真的領(lǐng)會我前面講的原理了,要自己做出來理論上確實(shí)不難??扇绻悻F(xiàn)在還是一點(diǎn)頭緒都沒有,恐怕很有必要把我的教程再從頭到尾重新看一遍了,用很長時(shí)間只學(xué)會一個(gè)知識點(diǎn)不可怕,怕就怕你用很長時(shí)間學(xué)了很多知識點(diǎn),卻沒一個(gè)真正學(xué)會!
最后如果有誰通過自己的努力做出真正屬于自己的FLASH留言本了,別忘了貼上來讓火山和同志們一起欣賞欣賞,火山也算沒白忙活這么長時(shí)間了:)
LV與ASP綜合運(yùn)用之一:demo4
昨天寫完上一節(jié)沒什么事就在論壇到處逛,偶然發(fā)現(xiàn)一個(gè)帖子,是經(jīng)典前斑竹“手工感情”寫的,其中總結(jié)了FLASH與ASP通訊的三種常見方法,包括loadVariables,LoadVars和XML,跟貼還有一些比較深入的討論,我覺得很好,大家對哪種方式有興趣的話不妨看一下前輩的帖子,火山這里就不再嘮叨了。只有一種方式他們沒提到,就是getURL,下面我就著重講一下這種通訊方式。
手工感情斑竹的教程:http://bbs.blueidea.com/viewthread.php?tid=1113968&highlight=
借這個(gè)教程,我們再來一起悼念一下這位無私奉獻(xiàn)的前輩——藍(lán)色每一位無私奉獻(xiàn)者都不應(yīng)當(dāng)被遺忘!
繼續(xù)我的教程,getURL的特別之處在于它能打開一個(gè)新的ASP網(wǎng)頁,并使這個(gè)網(wǎng)頁接收到傳遞的變量,這樣ASP網(wǎng)頁就能根據(jù)這個(gè)變量進(jìn)行各種設(shè)置和顯示了,我的FLASH BLOG中就利用了這個(gè)技術(shù)。遺憾的是,getURL無法指定傳遞變量的個(gè)數(shù),它會非常機(jī)械的把同一層級下的所有變量都傳遞給ASP,如果你把調(diào)用getURL函數(shù)的語句和大量其它AS語句都混在一起,勢必會傳遞大量垃圾變量,解決的方法是把要傳遞的變量和調(diào)用getURL函數(shù)的語句都寫在一個(gè)獨(dú)立的MC中。下面我簡單演示一下它的用法:
1,先在同一目錄下建立一個(gè)“geturl.asp”文件和“geturl.fla”文件。
2,在“geturl.asp”中輸入下面的代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//接收變量
var neirong1=Request("neirong1_flash");
var neirong2=Request("neirong2_flash");
var neirong3=Request("neirong3_flash");
//顯示變量內(nèi)容
Response.Write("內(nèi)容1的值是"+neirong1+"<br>");
Response.Write("內(nèi)容2的值是"+neirong2+"<br>");
Response.Write("內(nèi)容3的值是"+neirong3);
%>
3,再在“geturl.fla”中建立一個(gè)按鈕“anniu_btn”,并在貞上寫代碼:
var neirong1_flash = "neirong1";
var neirong2_flash = "neirong2";
anniu_btn.onRelease = function() {
getURL("geturl.asp", "_blank", "get");
};
這樣前期工作就完成了,下面我們來進(jìn)行一系列對比性的測試:
①直接發(fā)布測試,當(dāng)我們點(diǎn)擊按鈕的時(shí)候,會發(fā)現(xiàn)新打開了“geturl.asp”,頁面顯示:
內(nèi)容1的值是neirong1
內(nèi)容2的值是neirong2
內(nèi)容3的值是undefined
看來我們確實(shí)接收到變量neirong1_flash和neirong2_flash了,由于neirong3_flash我們在FLASH中沒有定義,所以ASP中得到undefined?,F(xiàn)在我們注意觀察ASP網(wǎng)頁的URL后綴:
?neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2
這個(gè)后綴經(jīng)過了URL編碼,翻譯過來其實(shí)是:
?neirong1_flash=neirong1&neirong2_flash=neirong2
它的格式大家是不是覺得非常熟悉呢?答對了!就是我們在前面一直強(qiáng)調(diào)的“變量/值”配對,它的變量傳遞原理與LV遵循的是同一規(guī)則!怎么樣?現(xiàn)在體會到什么是一通百通,觸類旁通了吧:)需要解釋的一點(diǎn)是,當(dāng)傳遞多個(gè)“變量/值”對的時(shí)候,他們之間用“&”分隔,與TXT中的數(shù)據(jù)格式又相同了。
②把“geturl.fla”中“getURL”函數(shù)中的“get”傳遞方式改為“post”再測試一下,你會發(fā)現(xiàn)ASP網(wǎng)頁在瀏覽器URL中的后綴沒有了,但網(wǎng)頁顯示結(jié)果不變。
③現(xiàn)在我們再把“geturl.fla”中“getURL”函數(shù)改成下面的形式:
getURL("geturl.asp?neirong3_flash=neirong3", "_blank", "get");
發(fā)布測試,我們會發(fā)現(xiàn)點(diǎn)擊按鈕后,打開的ASP網(wǎng)頁顯示內(nèi)容發(fā)生了變化,neirong3接收到了值,網(wǎng)頁顯示內(nèi)容如下:
內(nèi)容1的值是neirong1
內(nèi)容2的值是neirong2
內(nèi)容3的值是neirong3
再觀察瀏覽器URL后綴:
?neirong3_flash=neirong3&neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2
可以發(fā)現(xiàn)多了一個(gè)“neirong3_flash=neirong3&”,而且它沒進(jìn)行URL編碼,這點(diǎn)火山也不太理解,為什么把變量直接寫在ASP文件調(diào)用語句中就不進(jìn)行URL編碼了呢?希望有前輩高手點(diǎn)明,先替大家一起謝謝了。
這里需要重點(diǎn)提示的是:以前見有些人說“getURL”函數(shù)可以通過在調(diào)用的文件名后加參數(shù)來傳遞指定的變量,這其實(shí)是視覺上的誤導(dǎo)。getURL永遠(yuǎn)都是傳遞所有的變量,只不過那些垃圾變量,如果你不測試的話,無法看到它們而已。
④最后再送大家一個(gè)大禮來給這篇教程畫上一個(gè)完美的句號,這個(gè)禮物是“測試的思考方式”:
變量有三個(gè)
變量傳遞的寫法有兩種:直接寫在文件名后或者在時(shí)間軸聲明并賦值
變量傳遞的方式有兩種:get和post
所以測試的可能性一共就有:3*2*2=12種,我只做了4種代表性的,其它的留給讀者自己。
呵呵,怎么樣,這種思想很容易理解吧?可惜道理大家都懂,實(shí)踐總是很難!
經(jīng)典論壇討論:
http://bbs.blueidea.com/thread-2701824-1-1.html
相關(guān)文章
在Flash 設(shè)為首頁 加為收藏實(shí)現(xiàn)代碼
一直都是用js實(shí)現(xiàn)設(shè)為首頁和加為收藏頁面實(shí)現(xiàn) 在Flash中實(shí)現(xiàn)“設(shè)為首頁”和“加為收藏”功能是使用Get URL結(jié)合JavaScript來實(shí)現(xiàn)的。2009-03-03圖文演示Flash+ASP實(shí)現(xiàn)用戶登錄/注冊程序
圖文演示Flash+ASP實(shí)現(xiàn)用戶登錄/注冊程序...2007-12-12AS3.0 實(shí)例學(xué)習(xí) 熟悉tween以及tweenEvent的運(yùn)用
AS3.0 實(shí)例學(xué)習(xí) 熟悉tween以及tweenEvent的運(yùn)用...2007-12-12高手寫的Tracer-Flash代碼調(diào)試類代碼下載
高手寫的Tracer-Flash代碼調(diào)試類代碼下載...2007-12-12AS3.0實(shí)例學(xué)習(xí) 熟悉新的事件機(jī)制和addChild的運(yùn)用
AS3.0實(shí)例學(xué)習(xí) 熟悉新的事件機(jī)制和addChild的運(yùn)用...2007-12-12