FLASH與ASP通信原理入門

發布時間:2007年03月15日      浏覽次數:4916 次
經常有人問我(wǒ)(wǒ)FLASH留言闆的制作方法,無奈這東西一(yī)句兩句沒辦法說清楚,于是就萌發了寫教程的想法。可後來又(yòu)一(yī)想,授人以魚,不如授人以漁,還不如集中(zhōng)精力好好講将FLASH與ASP的通訊原理,原理通了,具體(tǐ)項目就可以自由發揮了。
我(wǒ)(wǒ)這個教程面向初級群體(tǐ),在開(kāi)始教程之前,我(wǒ)(wǒ)假設你已經具備FLASH操作基礎知(zhī)識,了解IIS配置以及運行環境。盡管FLASH與ASP通信方式有很多,但這篇教程中(zhōng)我(wǒ)(wǒ)選擇使用LoadVars類,一(yī)因爲LoadVars類容易掌握,易于講解;二是因爲它不牽扯太多其他方面的知(zhī)識。另外(wài),我(wǒ)(wǒ)在ASP中(zhōng)采用的是JS腳本,因爲JS腳本跟AS非常像,隻要你有一(yī)定的AS基礎,JS不用學就可以基本看懂了。最後是FLASH版本,我(wǒ)(wǒ)選擇flash pro 8.0簡體(tǐ)中(zhōng)文版,swf發布爲AS2.0,flashplayer8.0。
在看我(wǒ)(wǒ)的教程之前,建議先抽出幾分(fēn)鍾閱讀一(yī)下(xià)“FLASH基礎開(kāi)發習慣”,這樣更有利于理解我(wǒ)(wǒ)的代碼。
目錄:
LoadVars類基礎講解(LoadVars類以下(xià)簡稱LV)
ASP中(zhōng)基本的輸入輸出
LV與ASP通訊原理
ASP操作數據庫入門
LV與ASP綜合運用
其它通訊方式原理淺談
這裏我(wǒ)(wǒ)主要圍繞我(wǒ)(wǒ)的教程進行講解,區别有些全盤灌輸的教程,我(wǒ)(wǒ)将有真對性的着重講此類的兩個方法和一(yī)個事件:load、loadAndSend方法,和onLoad事件。如果你需要更詳細的了解LV類,建議你查一(yī)下(xià)幫助:幫助→flash幫助→全部書(shū)籍→ActionScript 2.0 語言參考→ActionScript 類→LoadVars。當然你也可以直接搜索LoadVars。
LV與TXT通訊。
不是要講ASP嗎(ma)?怎麽講起TXT了?呵呵,先别急,其實LV跟ASP通訊原理與跟TXT通訊原理是一(yī)樣的。TXT大(dà)家經常用,講起來比較容易理解。
LV跟TXT通訊需要在TXT中(zhōng)采用“變量”/“值”配對的數據模式。比如:wenben=我(wǒ)(wǒ)要做FLASH留言本。這裏“wenben”就是變量,“我(wǒ)(wǒ)要做FLASH留言本”就是值,而“=”就是它們的配對方式,也就是建立聯系的方式。 好了,現在我(wǒ)(wǒ)們建立一(yī)個“lv_shiyan.txt”文本文件,并在其中(zhōng)輸入:neirong_txt=我(wǒ)(wǒ)要做FLASH留言本。然後在同文件夾下(xià)再建立一(yī)個“lv_shiyan.fla”,在第一(yī)貞寫代碼:
//設置編碼,不然會顯示亂碼
System.useCodepage = true;
//實例化一(yī)個LV對象
var shiyan_lv = new LoadVars();
//載入外(wài)部文本
shiyan_lv.load("lv_shiyan.txt");
//載入成功後
shiyan_lv.onLoad = function(chenggong) {
if (chenggong) {
//獲取外(wài)部文本内容
var neirong = shiyan_lv.neirong_txt;
//輸出文本内容
trace("您載入的文本内容是:"+neirong);
}else{
//加載失敗給予提示
trace("加載失敗");
}
};
運行上面的代碼,你會在輸出面闆中(zhōng)看到“您載入的文本内容是:我(wǒ)(wǒ)要做FLASH留言本”,由此可見,外(wài)部“lv_shiyan.txt”中(zhōng)的内容已經成功加載。有興趣的朋友可以改動一(yī)下(xià)TXT文件名,試驗一(yī)下(xià)加載失敗的情況。
通過上面的代碼,我(wǒ)(wǒ)們學到以下(xià)知(zhī)識:
1,如何實例化一(yī)個LV對象(使用new關鍵字)
2,如何用LV對象加載外(wài)部文本文件(使用load方法)
3,如何判斷外(wài)部文本文件是否加載成功(使用onLoad事件)
4,當外(wài)部文本文件加載成功後,如何獲取并利用其内容。
在外(wài)部文本文件中(zhōng),我(wǒ)(wǒ)們之所以使用“變量/值”配對的數據格式,正是爲了被LV對象利用,當外(wài)部文本文件加載成功後,其中(zhōng)的變量就會被LV對象記錄,而在AS中(zhōng)通過LV對象引用外(wài)部變量的方式則爲:LV對象.外(wài)部文本文件中(zhōng)的變量名字。上面的代碼中(zhōng)即爲:shiyan_lv.neirong_txt。
上面的例子中(zhōng)講了LV與TXT通訊的基本原理,現在我(wǒ)(wǒ)們來擴展一(yī)下(xià),如果我(wǒ)(wǒ)們想在一(yī)個外(wài)部TXT中(zhōng)使用多個變量如何做呢?答案其實很簡單,我(wǒ)(wǒ)們隻需在TXT中(zhōng)使用多個“變量/值”對,并把每個“變量/值”對用“&”進行分(fēn)隔。我(wǒ)(wǒ)們依然利用上面示例的“lv_shiyan.txt”文件,這次把裏面的内容換成下(xià)面的形式:
neirong1_txt=戰勝LoadVar類!&neirong2_txt=戰勝ASP!&neirong3_txt=我(wǒ)(wǒ)能做FLASH留言闆了!
然後再把“lv_shiyan.fla”中(zhōng)的代碼換成下(xià)面的内容:
System.useCodepage = true;
var shiyan_lv = new LoadVars();
shiyan_lv.load("lv_shiyan.txt");
shiyan_lv.onLoad = function(chenggong) {
if (chenggong) {
//獲取外(wài)部文本内容
var neirong1 = shiyan_lv.neirong1_txt;
var neirong2 = shiyan_lv.neirong2_txt;
var neirong3 = shiyan_lv.neirong3_txt;
//輸出文本内容
trace("您載入的文本内容是:"+neirong1+"/"+neirong2+"/"+neirong3);
}else{
trace("加載失敗");
}
};
運行上面的代碼,在輸出窗口我(wǒ)(wǒ)們可以看到“戰勝LoadVar類!/戰勝ASP!/我(wǒ)(wǒ)能做FLASH留言闆了!”,說明我(wǒ)(wǒ)們獲得了外(wài)部TXT中(zhōng)全部的變量内容。
有興趣的朋友可以把“lv_shiyan.txt”中(zhōng)的内容改成下(xià)面的形式看輸出結果有沒有變化:
&neirong1_txt=戰勝LoadVar類!
&neirong2_txt=戰勝ASP!
&neirong3_txt=我(wǒ)(wǒ)能做FLASH留言闆了!
然後再改成下(xià)面的結果再試驗一(yī)下(xià)輸出結果:)
&neirong1_txt=戰勝LoadVar類!&
&neirong2_txt=戰勝ASP!&
&neirong3_txt=我(wǒ)(wǒ)能做FLASH留言闆了!&
原因其實很簡單,自己思考一(yī)下(xià)拉:)
呼呼,好了,LV類先講到這裏了,下(xià)面講講ASP的基本格式和語法,尤其是輸入輸出語句。
ASP經過長時間的積澱,其内容非常豐富,但如果僅是爲了開(kāi)發一(yī)個簡易的留言本,那隻需要掌握最基本的輸入輸出就可以了。
我(wǒ)(wǒ)們新建一(yī)個asp_jichu.asp文件,在裏面輸入“★ASP中(zhōng)基本的輸入輸出”,然後保存。OK,這樣我(wǒ)(wǒ)們就創建一(yī)個ASP文件了。怎麽樣?十分(fēn)簡單吧:)然後我(wǒ)(wǒ)們在IIS下(xià)運行這個ASP文件,就會看到網頁上顯示“★ASP中(zhōng)基本的輸入輸出”。内容雖然能顯示,但這樣的顯示對我(wǒ)(wǒ)們幾乎沒有任何作用。ASP爲何爲ASP?主要是因爲它能完成服務器與客戶端的交互,比如它能接收客戶端發送的變量,并根據這些變量以特定的方式顯示客戶需要的信息。而上面的“asp_jichu.asp”,并沒有起到任何交互作用,也就失去(qù)了ASP的意義。
在正式開(kāi)始交互講解之前,還有必要先講一(yī)下(xià)ASP文件的組成。ASP文件的構成隻用一(yī)句話(huà)就能概括:所有的ASP語句都以“<%”開(kāi)始,以“%>”結束。還有一(yī)點需要提示的是,在IIS中(zhōng),一(yī)般默認ASP使用VBScript,但我(wǒ)(wǒ)們使用的是javascript,所以在ASP文件一(yī)開(kāi)始,我(wǒ)(wǒ)們需要加上一(yī)句:
<%@LANGUAGE="JAVASCRIPT"%>
切入重點,首先講如何向ASP傳遞變量。方法有兩種,即常見的GET和POST方法。GET方法适用于傳遞少量内容,一(yī)般在2K以内,變量及内容會附加在網址後面,變量以“?”開(kāi)頭,變量和内容之間同樣遵循上一(yī)篇中(zhōng)講的“變量/值”配對原則。而POST方法,能夠傳遞大(dà)量内容,且内容不會顯示在網址中(zhōng)。雖然GET方式傳遞的内容少,而且不安全,但用來做教程演示卻非常直觀。現在我(wǒ)(wǒ)就用這種方式來演示ASP如何接收變量。還是利用我(wǒ)(wǒ)們開(kāi)始建立的那個“asp_jichu.asp”文件,在其中(zhōng)輸入如下(xià)内容并保存:
★ASP中(zhōng)基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//獲取網址中(zhōng)變量的内容
neirong=Request("neirong_wangzhi");
//顯示變量内容
Response.Write("地址欄傳遞過來的内容是:"+neirong);
%>
然後在IIS下(xià)運行這個文件,我(wǒ)(wǒ)們會看到網頁中(zhōng)顯示:
★ASP中(zhōng)基本的輸入輸出
地址欄傳遞過來的内容是:undefined
首先我(wǒ)(wǒ)需要對“asp_jichu.asp”中(zhōng)的語句進行一(yī)下(xià)講解,在ASP中(zhōng),用來接收資(zī)料的是“Request”對象,而用來輸出内容的是則是“Response”對象的“Write”方法。需要注意的是,Request接收變量時,需要加上引号,而Response輸出變量時,則不需要。這樣一(yī)講,上面的代碼便不難理解,一(yī)開(kāi)始我(wǒ)(wǒ)們定義一(yī)個變量“neirong”,然後用它記錄傳遞給ASP的變量“neirong_wangzhi”中(zhōng)的内容,最後輸出“neirong”。但是我(wǒ)(wǒ)們并沒有對“neirong_wangzhi”進行賦值,所以得到了“undefined”。現在我(wǒ)(wǒ)們就使用GET方法對變量“neirong_wangzhi”進行賦值,看看效果如何。
前面已經講過了,GET方法傳遞的變量及内容會在浏覽器網址中(zhōng)顯示,其實這個顯示是一(yī)個中(zhōng)間過程,ASP正是根據這個中(zhōng)間過程,也就是地址欄中(zhōng)的信息來接收變量并進行處理最後輸出内容的。所以我(wǒ)(wǒ)們完全可以利用這個中(zhōng)間過程,直接在浏覽器地址欄中(zhōng)進行變量賦值。打開(kāi)運行中(zhōng)的“asp_jichu.asp”,并在網址最後加上下(xià)面的内容,按回車(chē)鍵,看網頁中(zhōng)有何變化?
?neirong_wangzhi=我(wǒ)(wǒ)要自己做FLASH留言闆
哈哈,你看到了嗎(ma)?這時網頁中(zhōng)顯示:
★ASP中(zhōng)基本的輸入輸出
浏覽器傳遞過來的内容是:我(wǒ)(wǒ)要自己做FLASH留言闆
這說明了什麽?我(wǒ)(wǒ)們接收到地址欄裏傳遞的變量内容了,我(wǒ)(wǒ)們成功了:)
疑!?你楞在那裏幹什麽?怎麽不跟我(wǒ)(wǒ)一(yī)起歡呼呢?是不是你GET傳遞方式還是不太明白(bái)?呵呵,沒關系,通過上面的演示,你隻需要記住以下(xià)知(zhī)識點就行了:
1,ASP文件的組成方式(所有的語句寫在“<%”和“%>”之間)
2,ASP如何接收外(wài)界傳遞的變量(使用Response對象)
3,ASP如何在浏覽器中(zhōng)顯示内容(使用Response的Write方法)
怎麽樣,我(wǒ)(wǒ)的要求不高吧?隻要記住以上三點,你就應該完全有信心看懂我(wǒ)(wǒ)下(xià)面的内容了,加油!
友情提示:
我(wǒ)(wǒ)們把“asp_jichu.asp”文件中(zhōng)的内容換成下(xià)面的形式看網頁中(zhōng)顯示的内容會不會有變化?
★ASP中(zhōng)基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
neirong=Request("neirong_wangzhi");
%>
浏覽器傳遞過來的内容是:<%Response.Write(neirong)%>
再換成如下(xià)形式看有沒有變化?
★ASP中(zhōng)基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
neirong=Request("neirong_wangzhi");
%>
浏覽器傳遞過來的内容是:<%=neirong%>
我(wǒ)(wǒ)們會發現以上三種形式得到的結果都一(yī)樣,由此可見ASP的寫法是很靈活的,我(wǒ)(wǒ)們要抓住其本質,不要被各種表面形式迷惑:)這裏需要說明的是最後一(yī)種寫法的最後一(yī)行代碼。<%=neirong%>是一(yī)種輸出的簡寫形式,它的作用相當于Response.Write,僅适用于當ASP語句隻有一(yī)行,且僅輸出單純變量的情況下(xià)。
呼呼,ASP的知(zhī)識暫時知(zhī)道這麽多就OK了,下(xià)面激動人心的時刻來到了,我(wǒ)(wǒ)們要開(kāi)始ASP和FLASH之間的交互了!
經過前兩節的學習,我(wǒ)(wǒ)們已經熟悉了LV類的使用,以及ASP的基本格式和輸入輸出了。現在我(wǒ)(wǒ)們就來看看這兩樣東西是怎麽融合到一(yī)起的。還記得我(wǒ)(wǒ)在講LV類的基本知(zhī)識時所舉的TXT那個例子嗎(ma)?LV與TXT通訊時,TXT中(zhōng)的數據需要寫成“變量/值”配對的格式,其實必須寫成這種格式并不是由TXT決定的,它是由LV的特性決定的,也就是說,LV與文本文件通訊需要“變量/值”這種數據格式。ASP文件其實也是文本文件,ASP與LV進行通訊的時候,它所輸出的内容格式也就必須遵循“變量/值”配對的規則。
好吧,讓我(wǒ)(wǒ)們從代碼中(zhōng)來一(yī)個直觀的體(tǐ)驗吧,我(wǒ)(wǒ)們還用“★LV類基礎講解”那一(yī)節中(zhōng)舉的那個傳遞多個變量的例子,還記得那個TXT文件的名字吧:“lv_shiyan.txt”,好的,現在我(wǒ)(wǒ)們直接把“lv_shiyan.txt”改成“lv_shiyan.asp”,同樣把“lv_shiyan.fla”代碼中(zhōng)shiyan_lv.load("lv_shiyan.txt")這句裏的lv_shiyan.txt也替換爲lv_shiyan.asp,然後直接在FLASH編輯環境中(zhōng)按Ctrl+Enter測試影片,我(wǒ)(wǒ)們發現輸出窗口輸出:“戰勝LoadVar類!/戰勝ASP!/我(wǒ)(wǒ)能做FLASH留言闆了!”,跟修改之前一(yī)樣。
昏!這樣也可以!?這算什麽?是FLASH與ASP的通訊嗎(ma)?怎麽不需要IIS都行?那是FLASH與TXT通訊嗎(ma)?可人家的後綴名明明是“.asp”嘛!?其實這裏火(huǒ)山也不是很明白(bái),但我(wǒ)(wǒ)更偏向于把它理解成FLASH與ASP的通訊,隻是因爲這個ASP文件中(zhōng)沒有ASP語句,不需要IIS支持就能顯示内容而已。如果你非要讨個說法,最保守的回答是:FLASH與文本文件的通訊:)
呵呵:)好了,不忽悠大(dà)家了。上面那一(yī)段搞不清楚沒關系,其實我(wǒ)(wǒ)從TXT過渡到ASP的目的還是想更直觀的告訴大(dà)家:FLASH顯示ASP中(zhōng)的内容跟TXT是一(yī)緻的。隻要我(wǒ)(wǒ)們想辦法把ASP輸出的數據格式搗鼓成“變量/值”配對就行了!
在TXT中(zhōng)又(yòu)繞了這麽長時間,大(dà)家着急了吧,好的,現在我(wǒ)(wǒ)要玩真的了,ASP正式登場:
首先我(wǒ)(wǒ)們把“lv_shiyan.asp”中(zhōng)的内容改成如下(xià)形式:
★LV與ASP通訊原理<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
Response.Write("&neirong1_txt=戰勝LoadVar類!&neirong2_txt=戰勝ASP!&neirong3_txt=我(wǒ)(wǒ)能做FLASH留言闆了!&");
%>
我(wǒ)(wǒ)們先在IIS下(xià)運行一(yī)下(xià),網頁中(zhōng)會顯示如下(xià)内容:
★LV與ASP通訊原理
&neirong1_txt=戰勝LoadVar類!&neirong2_txt=戰勝ASP!&neirong3_txt=我(wǒ)(wǒ)能做FLASH留言闆了!&
恩!?怎麽那麽眼熟啊,恭喜你,答對了,這不正是“lv_shiyan.txt”中(zhōng)的内容嘛!隻不過“★”後的标題換成這節的标題了:)好的,那麽,聰明的你,現在是否已經預料到我(wǒ)(wǒ)下(xià)一(yī)步想幹什麽呢?恭喜你,你又(yòu)答對了,你怎麽那麽聰明呢,下(xià)一(yī)步當然就是在FLASH中(zhōng)顯示這些數據拉。說幹就幹,回到“lv_shiyan.fla”的編輯環境中(zhōng),再次按Ctrl+Enter測試影片。哈哈,成功了!輸出窗口顯示:“戰勝LoadVar類!/戰勝ASP!/我(wǒ)(wǒ)能做FLASH留言闆了!”,哈哈哈哈——哎!說你呢,你笑什麽?我(wǒ)(wǒ)高興是因爲我(wǒ)(wǒ)終于又(yòu)把你忽悠了,你笑什麽呢?看看我(wǒ)(wǒ)們的“lv_shiyan.asp”文件,我(wǒ)(wǒ)們明明已經寫了ASP語句了啊,可怎麽還是不需要IIS支持就能直接在FLASH編輯環境中(zhōng)顯示呢?難道我(wǒ)(wǒ)們的FLASH軟件是在IIS下(xià)運行的嗎(ma)?這當然不可能,那到底怎麽會事啊?嘿嘿:)好了,不頭痛大(dà)家了,其實,在我(wǒ)(wǒ)們第一(yī)次把“lv_shiyan.txt”直接改成“lv_shiyan.asp”并運行影片測試的時候,“lv_shiyan.asp”中(zhōng)的數據已經被讀入内存,後來盡管我(wǒ)(wǒ)們又(yòu)把“lv_shiyan.asp”中(zhōng)的内容改成了ASP特有的輸出格式,但由于文件名字沒改變,運行影片測試的時候,FLASH還是會直接從内存中(zhōng)提取已經存儲過的内容,而上次的内容正好不需要IIS就能顯示,碰巧而已:)
那如何顯示新内容呢?我(wǒ)(wǒ)們隻需要利用随機函數給ASP傳遞一(yī)個沒有實際意義的變量就可以了。我(wǒ)(wǒ)們可以把加載ASP的語句改成下(xià)面的樣子:
shiyan_lv.load("lv_shiyan.asp?bianliang="+random(9999));
現在再次在FLASH中(zhōng)測試影片,發現輸出窗口顯示以下(xià)提示:
加載失敗
Error opening URL "file:///E|/flashlianxi/flash與asp練習/FLASH與ASP通訊入門級教程/lv_shiyan.asp?bianliang=5624"
恩!?又(yòu)有問題了,不是說“bianliang”沒有實際意義嗎(ma)?怎麽會導緻“Error opening URL”呢?呵呵:)其實這裏說的“沒有實際意義”是針對ASP來說的,更确切的說,是針對浏覽器的,還記得我(wǒ)(wǒ)在“★ASP中(zhōng)基本的輸入輸出”一(yī)節中(zhōng)講的GET傳遞方式嗎(ma)?如果忘了一(yī)會兒可以回去(qù)複習下(xià)。其實我(wǒ)(wǒ)的建議是你先跟着我(wǒ)(wǒ)的進度把每節徹底弄明白(bái),等我(wǒ)(wǒ)寫完後,再通讀一(yī)邊,然後你就完全可以自己動手做個留言闆了。接上面的,既然這個“沒有實際意義”不是針對FLASH的,那FLASH肯定就不認識了,它會把“lv_shiyan.asp?bianliang=5624”全部當成文件名,所以當然找不到這個文件了。
是該撥開(kāi)雲霧見晴天的時候了。現在我(wǒ)(wǒ)們先在“lv_shiyan.fla”中(zhōng)添加一(yī)個動态文本域,并命名爲“wenben_txt”,然後把輸出代碼改動一(yī)下(xià),讓本來在輸出窗口顯示的内容顯示在動态文本域裏,具體(tǐ)改動是把下(xià)面第一(yī)行代碼換成第二行:
trace("您載入的文本内容是:"+neirong1+"/"+neirong2+"/"+neirong3);
wenben_txt.text = neirong1+"/"+neirong2+"/"+neirong3;
好了,最後再發布“lv_shiyan.swf”和“lv_shiyan.html”到與ASP文件相同的文件夾下(xià),并在IIS下(xià)運行“lv_shiyan.html”,你會看到SWF的動态文本域裏顯示“戰勝LoadVar類!/戰勝ASP!/我(wǒ)(wǒ)能做FLASH留言闆了!”,現在你終于可以放(fàng)心的歡呼了:我(wǒ)(wǒ)們終于可以把ASP輸出的内容顯示在FLASH裏了,哈哈……。
先喝(hē)口水吧,一(yī)眨眼快兩個小(xiǎo)時了,我(wǒ)(wǒ)怎麽寫的那麽慢(màn)啊,加油加油!上面講的其實是ASP怎麽向FLASH傳遞資(zī)料,這不是真正意義上的交互,交互是雙方互動的,現在我(wǒ)(wǒ)們就來看看FLASH怎麽向ASP傳遞資(zī)料。在此之前請保證你還記得我(wǒ)(wǒ)在“★ASP中(zhōng)基本的輸入輸出”一(yī)節中(zhōng)講的ASP是怎麽接收一(yī)個變量的,我(wǒ)(wǒ)們還用那一(yī)節所用的“asp_jichu.asp”文件,當時我(wǒ)(wǒ)是通過GET方式直接在浏覽器地址欄中(zhōng)對“neirong_wangzhi”進行賦值的,并且測試證明ASP确實通過Request接收到了這個變量的值。現在我(wǒ)(wǒ)們就是要讓FLASH做地址欄做的事,我(wǒ)(wǒ)們要通過FLASH對“neirong_wangzhi”進行賦值。
在正式開(kāi)始之前,我(wǒ)(wǒ)們還有以下(xià)工(gōng)作要完成:
1,在“lv_shiyan.fla”中(zhōng)再添加一(yī)個按鈕,命名爲“tijiao_btn”。
2,把“wenben_txt”這個動态文本域改成輸入文本域,取消HTML輸出,并更名爲:“shuru_txt”。
3,再添加一(yī)個動态文本域,用來接收從ASP傳回的資(zī)料,命名爲:“shuchu_txt”。
4,把“asp_jichu.asp”中(zhōng)的内容改成下(xià)面的内容:
★ASP中(zhōng)基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//獲取從FLASH傳遞過來的變量
neirong=Request("neirong_flash");
//輸出要返回到FLASH中(zhōng)的内容
Response.Write("&fanhui_asp=哈,你輸入的内容已經傳遞給ASP,并且又(yòu)已經從ASP返回到FLASH了,你輸入的内容是:"+neirong);
%>
5,最後把“lv_shiyan.fla”中(zhōng)的代碼改成下(xià)面的内容:
System.useCodepage = true;
var shiyan_lv = new LoadVars();
tijiao_btn.onRelease = function() {
//獲得輸入的文本内容,并把這個内容記錄在變量“neirong_flash”中(zhōng)
//這裏相當于已經對變量“neirong_flash”進行了賦值
shiyan_lv.neirong_flash = shuru_txt.text;
//将LV對象中(zhōng)儲存的所有變量都傳遞給ASP,不過這裏我(wǒ)(wǒ)們隻設定了一(yī)個,就是我(wǒ)(wǒ)們的“neirong_flash”
//向ASP傳遞成功後,我(wǒ)(wǒ)們再把從ASP傳遞回來的變量還儲存在“shiyan_lv”對象中(zhōng)
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 = "加載失敗";
}
};
呼呼,改的東西真不少啊,先不講代碼了,直接發布測試一(yī)下(xià)吧,先有個直觀的認識:在輸入文本框中(zhōng)輸入“我(wǒ)(wǒ)要做FLASH留言闆”,然後點擊提交按鈕,你就會看到在動态文本框“shuchu_txt”中(zhōng)馬上就會顯示:“哈,你輸入的内容已經傳遞給ASP,并且又(yòu)已經從ASP返回到FLASH了,你輸入的内容是:我(wǒ)(wǒ)要做FLASH留言闆”。這個例子的源文件也可以直接在下(xià)面下(xià)載。
小(xiǎo)提示:如果你在浏覽器中(zhōng)直接點擊刷新不能正确顯示更新後的頁面和内容,請按如下(xià)方式設置IE浏覽器:→工(gōng)具→Internet選項→設置→鈎選“每次訪問此頁時檢查”。這樣我(wǒ)(wǒ)們以後就可以直接利用刷新來測試,不用再擔心IIS刷新和内存問題了。
最後我(wǒ)(wǒ)們來對測試過程中(zhōng)的數據流程做一(yī)個系統的分(fēn)析:
用戶在FLASH的輸入文本框“shuru_txt”輸入“我(wǒ)(wǒ)要做FLASH留言闆”
通過“shiyan_lv.neirong_flash = shuru_txt.text;”這句代碼把用戶輸入的内容儲存在“shiyan_lv”對象的“neirong_flash”
通過“shiyan_lv”對象的“sendAndLoad”方法将它記錄的變量都傳遞給指定的ASP文件
在ASP文件中(zhōng)通過“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”中(zhōng)
當新返回的内容在FLASH中(zhōng)加載完成後,調用“shiyan_lv”對象的onLoad事件
通過“shuchu_txt.text = shiyan_lv.fanhui_asp;”這句代碼在輸出文本框中(zhōng)顯示新返回的内容
經過這個分(fēn)析,相信大(dà)家應該可以從總體(tǐ)上有一(yī)個理性的認識了吧。
最後還需要重點強調的幾點是:
LV對象在調用“sendAndLoad”方法發送變量的時候,會把LV對象中(zhōng)儲存的所有變量都發送給ASP。
ASP在接收LV對象傳遞過來的變量時,隻需要在Request中(zhōng)使用與FLASH中(zhōng)相同的變量名字就可以了。
ASP輸出的資(zī)料一(yī)定要使用“變量/值”配對的格式,因爲隻有輸出成這種格式,FLASH才能像處理TXT一(yī)樣将ASP輸出的資(zī)料分(fēn)别記錄在幾個變量并保存在指定接收資(zī)料的LV對象中(zhōng)。
如果我(wǒ)(wǒ)們想向FLASH傳遞兩個或者更多變量,我(wǒ)(wǒ)們可以在FLASH中(zhōng)這樣寫:(以傳遞三個變量爲例)
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");
傳遞大(dà)量資(zī)料時,必須使用POST方法。
如果我(wǒ)(wǒ)們想在FLASH中(zhōng)接收到多個從FLASH傳遞過來的變量,就按TXT的處理方式來就OK了。
呼呼,喘口氣,這一(yī)節終于寫完了。本來計劃下(xià)次直接寫“LV與ASP綜合運用”的,但現在想想,還是很有必要加上一(yī)節“ASP操作數據庫入門”,請繼續關注。有什麽好的意見也可以提一(yī)下(xià),希望通過大(dà)家的共同努力讓這篇教程能讓菜鳥以最快的速度,最少的障礙自己制作出真正屬于自己的FLASH留言闆。
還記得我(wǒ)(wǒ)們向ASP傳遞的那個無意義的變量“bianliang”嗎(ma)?既然我(wǒ)(wǒ)們向ASP傳遞了,那ASP就應該能接收的到,有興趣的朋友可以在“asp_jichu.asp”中(zhōng)加一(yī)個接收變量的語句,測試一(yī)下(xià)效果。改動後的ASP代碼如下(xià):
★ASP中(zhōng)基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
var canshu;
//獲取網址中(zhōng)變量的内容
neirong=Request("neirong_flash");
//獲取無意義的參數
canshu=Request("bianliang");
//顯示變量内容
Response.Write("&fanhui_asp=哈,你輸入的内容已經傳遞給ASP,并且又(yòu)已經從ASP返回到FLASH了,你輸入的内容是:"+neirong+"。你傳遞的無意義的參數是:"+canshu);
%>
測試後發現真的可以接收到一(yī)個數字呢,而且每次點提交這個數字幾乎都不一(yī)樣,在0-9999之間變化。看來我(wǒ)(wǒ)們确實接收到FLASH傳遞過來的随機變量了,可傳遞的時候,地址欄裏怎麽沒顯示呢?是因爲這次我(wǒ)(wǒ)們采用了“POST”傳遞方式,這種方式用來傳遞大(dà)量資(zī)料,是不會在地址欄中(zhōng)顯示變量和它的值的。
FLASH與ASP交互實例:http://www.blueidea.com/articleimg/2006/12/4340/demo01.rar
經過前幾節的學習,我(wǒ)(wǒ)們對LV類和ASP的輸入輸出應該已經很熟練了吧,而且我(wǒ)(wǒ)們也已經了解了LV與ASP通訊的基本原理。這個原理可能并不複雜(zá),不過如果你想利用它做出點東西來,關鍵還是要看你ASP和FLASH的基本功了。遺憾的是這篇教程主要講述FLASH與ASP通訊原理,更詳細更高級的ASP和FLASH技巧,我(wǒ)(wǒ)恐怕不能多講,不然這篇教程不知(zhī)道什麽時候才能寫完,同時也會失去(qù)重點。這節我(wǒ)(wǒ)将簡單的羅列一(yī)些ASP操作ACCESS數據庫的基本知(zhī)識,注意,我(wǒ)(wǒ)隻是點到爲止,更詳細的資(zī)料和講解網上很多,你可以自己去(qù)搜索。
首先我(wǒ)(wǒ)們需要建立一(yī)個ACCESS數據庫文件,命名爲“shujuku.mdb”,并在其中(zhōng)新建數據表,命名爲“shujubiao”。數據表中(zhōng)字段名稱、字段類型和字段内容如下(xià)圖所示。示例的數據庫可以在最後下(xià)載,下(xià)載後請保存起來,因爲我(wǒ)(wǒ)以後的講解都會用到它。
然後在數據庫同文件夾下(xià)建立一(yī)個操作數據庫的ASP文件,命名爲“caozuo.asp”,并輸入以下(xià)代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立一(yī)個數據庫鏈接對象
lianjie = Server.CreateObject("ADODB.Connection");
//用已經建立的數據庫鏈接對象打開(kāi)數據庫
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//創建一(yī)個“記錄集”,即“Recordset”,它的任務是儲存從數據庫裏提取出來的數據
rs = Server.CreateObject("ADODB.Recordset");
//創建查詢數據庫的SQL語句,這裏将查出“shujubiao”中(zhōng)的所有數據
sql="select * from shujubiao";
//執行數據庫查詢,最後的數字參數主要用來指定打開(kāi)和查詢數據庫的方式,有興趣可以百度一(yī)下(xià)
rs.Open(sql, lianjie, 3);
%>
說明:上面的代碼,除了SQL語句外(wài),每個ASP文件差不多都是類似的,主要用來初始和查詢數據。數據是提出來了,但如果你想要按自己方式使用它們,還是要借助JS腳本來實現。另外(wài)這裏要着重說一(yī)下(xià)SQL,SQL是專門用來查詢數據庫的語言,它可以按指定的規則查詢數據庫中(zhōng)指定的表和字段,功能強大(dà),卻又(yòu)非常容易理解,基本可以從字面意思猜出其功能來,這一(yī)節的最後我(wǒ)(wǒ)會仔細講一(yī)下(xià)常用的SQL語句。
現在先回到我(wǒ)(wǒ)們的ASP中(zhōng),繼續在“caozuo.asp”中(zhōng)追加以下(xià)代碼:
<%
//當前顯示的頁數,這裏設置爲第一(yī)頁
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下(xià)運行一(yī)下(xià),你會看到網頁上顯示:
總條數爲:13
總頁數爲:3
每頁記錄條數:5
當前頁:1
有興趣的朋友可以自己修改一(yī)下(xià)“meiyejilu”的值,然後再運行看看它和總頁數存在什麽關系,相信聰明的你一(yī)定能找到其中(zhōng)的規律:)注意,這裏我(wǒ)(wǒ)一(yī)直在用“rs”,在第一(yī)段舉例的代碼中(zhōng)我(wǒ)(wǒ)已經注釋過了,“rs”是“Recordset”對象的一(yī)個實例,我(wǒ)(wǒ)們從數據庫裏查詢出來的數據都會儲存在這個實例中(zhōng),我(wǒ)(wǒ)們之所以這麽做,是因爲“Recordset”對象有很多屬性和方法,方便我(wǒ)(wǒ)們使用,比如這裏的“PageSize”和“AbsolutePage”。
光顯示條數和頁數沒什麽太大(dà)意義,我(wǒ)(wǒ)們要的是記錄中(zhōng)的内容,好的,現在繼續追加以下(xià)代碼:
<%
//聲明一(yī)個變量用來存儲要輸出的内容,初始爲空
var shuchuneirong="";
//利用循環顯示一(yī)頁的所有内容,具體(tǐ)的頁碼在第二段代碼的“rs.AbsolutePage”中(zhōng)指定了
for (i=0;i<meiyejilu;i++){
//if的作用下(xià)面再進行說明
if(!rs.EOF){
//獲取字段内容
var xuhao=rs("xuhao");
var xingming=rs("xingming");
var yuwen=rs("yuwen");
var shuxue=rs("shuxue");
//一(yī)次循環将獲得一(yī)條記錄的所有内容,然後把這條記錄追加到變量“shuchuneirong”中(zhōng),這樣循環結束的時候,它将儲存本頁所有的記錄内容
shuchuneirong =shuchuneirong+"<br>序号:"+ xuhao +" | 姓名:"+xingming+" | 語文:"+yuwen+" | 數學:"+shuxue;
//本次循環結束後,将記錄集指定到下(xià)一(yī)條記錄
//上面的if判斷将在這裏發揮作用,當我(wǒ)(wǒ)們顯示最後一(yī)頁的時候,剩餘的記錄數很可能小(xiǎo)于設定的每頁記錄數
//如果不加判斷,rs就很有可能溢出界限,從而導緻錯誤
rs.MoveNext();
}
}
//在網頁中(zhōng)按指定格式輸出本頁所有的記錄内容
Response.Write(shuchuneirong);
//關閉記錄集對象
rs.Close();
//關閉連接對象
lianjie.Close();
%>
說明:啥都不說了,保存并運行吧,我(wǒ)(wǒ)們會在網頁中(zhōng)看到下(xià)面的輸出内容:
總條數爲:13
總頁數爲:3
每頁記錄條數:5
當前頁:1
序号:1 | 姓名:周星馳 | 語文:50 | 數學:72
序号:2 | 姓名:丘淑貞 | 語文:450 | 數學:100
序号:3 | 姓名:舒淇 | 語文:1000 | 數學:2000
序号:4 | 姓名:劉德華 | 語文:200 | 數學:1000
序号:5 | 姓名:小(xiǎo)布什 | 語文:500 | 數學:501
然後我(wǒ)(wǒ)們可以修改一(yī)下(xià)“dangqianye”,隻要“當前頁”小(xiǎo)于等于“總頁數”,就能正确顯示本頁的内容。其實現在很多FLASH留言本中(zhōng)的分(fēn)頁就是用的這一(yī)原理,隻不過到時候我(wǒ)(wǒ)們不可能像現在這樣手動修改“AbsolutePage”的值,我(wǒ)(wǒ)們需要從FLASH傳遞頁碼值,然後在ASP中(zhōng)接收并賦值給“AbsolutePage”。哈哈!現在你是不是有點躍躍欲試了?先别急,因爲我(wǒ)(wǒ)還有一(yī)招入室絕學沒傳你呢,這套絕學就是那威震武林的SQL。
說練就練,但爲了激發同學們學習的主動性,下(xià)面我(wǒ)(wǒ)僅給出做一(yī)個簡易留言本必備的SQL語句:
1,查詢語句
語法:select 字段名 from 數據表名 where 查詢條件 order by 排列方式 (不加desc從低到高排序,加上相反)
舉例:僅查詢“shujubiao”表中(zhōng)“xuhao”,“xingming”兩個字段,并且“xuhao”要大(dà)于3,結果按“xuhao”倒序排列:
SQL語句:select xuhao,xingming from shujubiao where xuhao>3 order by xuhao desc
2,删除記錄
語法:delete from 數據表 where 條件
舉例:删除“xingming”爲“小(xiǎo)布什”的記錄:
SQL語句:delete from shujubiao where xingming='小(xiǎo)布什'
3,添加記錄
語法:insert into 數據表 (字段名) values (字段值)
舉例:插入一(yī)條新記錄,“xingming”爲“火(huǒ)山”,“yuwen”爲“100”,“shuxue”是“1000”:
SQL語句:insert into shujubiao (xingming, yuwen, shuxue) values ('火(huǒ)山',100,1000)
說明:“xuhao”字段爲“自動編号類型”,不需要賦值。
4,更新記錄
語法:update 數據表 set 字段值=新值 where 條件
舉例:把“xuhao”爲“1”的記錄中(zhōng)“xingming”字段改爲“寂寞火(huǒ)山”,“yuwen”字段改爲“200”
SQL語句:update shujubiao set xingming='寂寞火(huǒ)山',yuwen=200 where xuhao=1
有了以上四大(dà)護法,打敗FLASH留言闆足夠了,建議大(dà)家親自動手把我(wǒ)(wǒ)寫的例句放(fàng)在“caozuo.asp”中(zhōng)實驗一(yī)下(xià),直觀的體(tǐ)驗一(yī)下(xià)效果。測試時,刷新頁面後你可能會看到頁面報錯,沒有關系,這并不影響SQL的執行,這時你可以關閉數據表再打開(kāi)就可以直接在數據庫中(zhōng)會看到效果了。隻有第一(yī)個例子必須改動一(yī)下(xià)ASP代碼,需要改那裏才能使頁面正常顯示呢?嘿嘿,這個當大(dà)家的小(xiǎo)作業了,注意看頁面的錯誤提示哦:)
下(xià)星期就要生(shēng)産實習了,一(yī)下(xià)就是三個星期,一(yī)定要趕在實習前完工(gōng),呼呼~~
其實講到這裏,你完全應該可以按着“LV與ASP通訊原理”一(yī)節中(zhōng)講的方法,自己想辦法把這節中(zhōng)在網頁裏顯示的内容傳遞到FLASH裏顯示了,善于學習的朋友不妨自己先動手試一(yī)下(xià),看能做到什麽程度:)
ASP操作數據庫入門實例:http://www.blueidea.com/articleimg/2006/12/4340/demo02.rar
這節是重點,我(wǒ)(wǒ)寫教程的還不怕長呢,大(dà)家也要堅持住啊!這節将對前面講過的知(zhī)識進行一(yī)個綜合運用。下(xià)面先回顧一(yī)下(xià)前面我(wǒ)(wǒ)們都掌握了哪些技能:
1,LV與外(wài)部文本文件通訊的基本原理(變量/值配對)
2,ASP如何接收變量以及輸出内容(Request和Response)
3,LV與ASP通訊基本原理(依舊(jiù)是變量/值配對原理)
4,ASP操作數據庫基本技巧,包括:
①如何查詢并顯示數據表内容
②如何删除一(yī)條記錄
③如何添加一(yī)條新記錄
④如何更新一(yī)條記錄
⑤如何顯示記錄的總條數
⑥如何分(fēn)頁,翻頁,以及顯示總頁數,當前頁碼和當前頁内容
現在請閉上眼睛想一(yī)下(xià),一(yī)個簡單的FLASH留言本所包含的内容不就這麽多嗎(ma)?如果我(wǒ)(wǒ)上面講的内容你都掌握了,還有什麽理由不能自己做一(yī)個留言闆呢——什麽?你沒有實戰經驗?好吧,這節我(wǒ)(wǒ)就連你這唯一(yī)的理由也消滅掉。這節中(zhōng)我(wǒ)(wǒ)将通過一(yī)個LV和ASP交互實例把上面講的内容來一(yī)個融合。請大(dà)家先下(xià)載我(wǒ)(wǒ)提供的源文件,其中(zhōng)包含五個文件:zonghe.fla、zonghe.swf、zonghe.html、zonghe.asp還有上節中(zhōng)提供的數據庫文件shujuku.mdb。這是已經做好的成品,大(dà)家不妨先删除“zonghe.fla”AS貞和“zonghe.asp”中(zhōng)的所有代碼,跟着我(wǒ)(wǒ)的講解再一(yī)起來完成它,這樣你會有更系統更深刻的認識。在此之前,你還非常有必要先在源文件中(zhōng)熟悉一(yī)下(xià)“zonghe.fla”裏的界面布局及元件命名。爲了方便講解,這裏同時貼出“zonghe.swf”的界面圖示:
下(xià)面我(wǒ)(wǒ)們來逐步演示各項功能,首先是顯示記錄内容及相關信息。
第一(yī)步:打開(kāi)“zonghe.fla”,在最上層的AS貞中(zhōng)寫代碼:
//================系統初始化=================
//——————界面初始化
//——————變量初始化
//——————數組初始化
//——————對象初始化
//================邏輯功能區=================
//================函數模塊區=================
上面是我(wǒ)(wǒ)的習慣,先用注釋把代碼分(fēn)好區,然後逐步向各區中(zhōng)添加需要的代碼。
第二步:“顯示”記錄功能測試:
我(wǒ)(wǒ)個人習慣是:前台界面→後台單獨完成→前台功能實現加後台合成,所以先寫後台。
1,在“zonghe.asp”中(zhōng)添加以下(xià)代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立數據庫鏈接對象
lianjie = Server.CreateObject("ADODB.Connection");
//打開(kāi)數據庫
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//創建“記錄集”
rs = Server.CreateObject("ADODB.Recordset");
//設置一(yī)個選項變量,根據這個選項的值,來決定執行對應功能的代碼,這個變量來自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>
<%
//——————根據變量“xuanxiang”決定調用對應的函數
//查詢顯示記錄演示
if(xuanxiang=="顯示"){
xianshi();
}
%>
<%
//——————定義“顯示”的功能函數
function xianshi(){
//查詢的SQL語句
sql="select * from shujubiao";
//執行數據庫查詢
rs.Open(sql, lianjie, 3);
//從FLASH接收當前頁碼
var dangqianye=Request("dangqianye_flash");
//從FLASH接收每頁顯示的記錄條數
var meiyejilu=Request("meiyejilu_flash");
//聲明一(yī)個變量用來存儲要輸出的内容,初始爲空
var shuchuneirong="";
//設置每頁顯示的記錄條數
rs.PageSize=meiyejilu;
//設置當前顯示的頁碼
rs.AbsolutePage=dangqianye;
//獲取記錄總條數
var zongtiaoshu=rs.RecordCount;
//獲取總頁數
var zongyeshu=rs.PageCount;
//利用循環顯示一(yī)頁的所有内容,具體(tǐ)的頁碼在第二段代碼的“rs.AbsolutePage”中(zhōng)指定了
for (i=0;i<meiyejilu;i++){
if(!rs.EOF){
//獲取字段内容
var xuhao=rs("xuhao");
var xingming=rs("xingming");
var yuwen=rs("yuwen");
var shuxue=rs("shuxue");
//将要顯示的内容記錄在“shuchuneirong”中(zhōng)
shuchuneirong =shuchuneirong+"<br>序号:"+ xuhao +" | 姓名:"+xingming+" | 語文:"+yuwen+" | 數學:"+shuxue;
rs.MoveNext();
}
}
//将查詢出來的内容輸出成變量/值配對形式
Response.Write("&neirong_asp="+shuchuneirong);
//輸出總條數
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//輸出總頁數
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>
<%
//關閉記錄集對象
rs.Close();
//關閉連接對象
lianjie.Close();
%>
說明:上面的代碼有點長,大(dà)家不要害怕,其似都是前面一(yī)節講過的東西。
代碼一(yī)共有四段:第一(yī)段聲明使用JS腳本;第二段主要是一(yī)些初始化,最後一(yī)句比較重要,變量“xuanxiang”将決定下(xià)面調用那個函數以執行對應的功能。第三段是邏輯功能區,根據變量“xuanxiang”決定調用那個函數;第四段是定義的“顯示”函數,用來顯示頁碼、記錄條數和記錄内容的,而且最後還以“變量/值”配對的形式輸出它們,以便于返回FLASH。需要提示的是,這段代碼中(zhōng)最開(kāi)始“每頁記錄數”和“當前頁”是從FLASH傳遞過來的;最後一(yī)段代碼用來關閉記錄集對象和數據庫連接。在後台代碼中(zhōng),最重要的是,我(wǒ)(wǒ)們要明白(bái)哪些變量是要從FLASH傳遞過來的,哪些又(yòu)是需要返回FLASH的。爲了避免混淆,我(wǒ)(wǒ)一(yī)般把從FLASH傳遞給ASP的變量後加“_flash”,而從ASP返回FLASH的變量後則加“_asp”後綴。
2,後台有了,回到FLASH中(zhōng)繼續我(wǒ)(wǒ)們的代碼吧,打開(kāi)“zonghe.fla”,輸入以下(xià)代碼:
//================系統初始化=================
//——————界面初始化
//編碼
System.useCodepage = true;
//——————變量初始化
//聲明一(yī)個“選項”變量,ASP中(zhōng)将根據這個變量決定當前演示的是那項功能
//初始化這個變量爲“顯示”,用來顯示記錄
var xuanxiang = "顯示";
//當前頁初始爲第1頁
var dangqianye = 1;
//每頁記錄數初始爲5條
var meiyejilu = 5;
//——————數組初始化
//——————對象初始化
//LV對象,從上到下(xià)依次用于“顯示”,“删除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================邏輯功能區==================
//——————顯示功能測試
xianshi();
//================函數模塊區==================
//——————“顯示”功能
function xianshi() {
//LV對象獲取“選項”内容
xianshi_lv.xuanxiang_flash = xuanxiang;
//獲取“當前頁”
xianshi_lv.dangqianye_flash = dangqianye;
//獲取“每頁記錄數”
xianshi_lv.meiyejilu_flash = meiyejilu;
//将以上獲取的内容傳遞給FLASH
xianshi_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), xianshi_lv, "post");
//加載完成後顯示一(yī)系列相關信息
xianshi_lv.onLoad = function(chenggong) {
if (chenggong) {
//顯示當前頁(直接從FLASH獲得)
dangqianye_txt.text = dangqianye;
//顯示每頁記錄數(直接從FLASH獲得)
meiyetiaoshu_txt.text = meiyejilu;
//顯示總條數,總頁數和本頁的記錄内容
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 = "加載失敗!";
}
};
}
說明:AS中(zhōng)的代碼不難理解,首先是“界面初始”,我(wǒ)(wǒ)定義了需要傳遞給ASP的三個變量“選項”,“當前頁”,“總頁數”。另外(wài)我(wǒ)(wǒ)還聲明了四個用于各種功能演示的LV對象,以備下(xià)面需要。“邏輯功能區”的代碼非常簡單,隻有一(yī)句函數調用,這正是邏輯區的精髓,通過簡潔的代碼清晰的反映功能邏輯。代碼最多的是“函數模塊區”,這裏定義的是“顯示”函數,注意它的數據流程,首先它将“選項”,“當前頁”和“每頁記錄數”記錄在LV對象中(zhōng),然後通過LV對象的sendAndLoad方法将這些信息發送給ASP,ASP接收到後,根據這些信息正确的輸出需要的内容,這些内容遵循“變量/值”配對規則,最後FLASH通過LV對象又(yòu)接收到這些返回的内容,并在接收成功後,在指定的動态文本框中(zhōng)顯示它們。
我(wǒ)(wǒ)們可以在IIS下(xià)運行一(yī)下(xià)“zonghe.html”看看效果,我(wǒ)(wǒ)們會看到正确頁碼信息,當前頁顯示爲1,“neirong_txt”文本框中(zhōng)顯示第一(yī)頁的内容。有興趣的朋友可以自己在“zonghe.fla”中(zhōng)修改一(yī)下(xià)“dangqianye”和“meiyejilu”兩個變量,看看顯示結果有什麽變化,思考一(yī)下(xià)導緻這些變化的規律又(yòu)是什麽。
今天就到這兒吧,建議大(dà)家多動動手,自己試驗一(yī)下(xià)看能不能僅利用一(yī)個ASP文件,就把“删除”,“更新”和“添加”功能都實現了。其實它們的原理跟“顯示”是相通的。等明天我(wǒ)(wǒ)寫完下(xià)一(yī)節,大(dà)家再看看自己寫的代碼和我(wǒ)(wǒ)的有什麽不同,也許會發現更多問題:)大(dà)家跟我(wǒ)(wǒ)一(yī)起加油吧!
LV與ASP綜合運用之一(yī):http://www.blueidea.com/articleimg/2006/12/4340/demo03.rar
LV與ASP綜合運用(二)
接上節,現在開(kāi)始第三步:“删除”功能:
在《ASP操作數據庫入門》一(yī)節的最後,我(wǒ)(wǒ)給出了删除一(yī)條記錄的SQL語句,不知(zhī)道大(dà)家當時自己動手試驗了沒。如果沒的話(huà)也沒有關系,現在就跟我(wǒ)(wǒ)一(yī)起在FLASH中(zhōng)實現這個功能吧。而且我(wǒ)(wǒ)将演示如何利用“zonghe.asp”一(yī)個後台文件實現所有功能。
在看代碼之前,請大(dà)家先思考這樣一(yī)個問題,如果要删除一(yī)條記錄的話(huà),你依據什麽删除呢?依據“yuwen”成績可以嗎(ma)?打開(kāi)我(wǒ)(wǒ)們的數據庫表可以看到“毛甯”,“鞏麗”和“李小(xiǎo)龍”都是100分(fēn),如果我(wǒ)(wǒ)們删除語文成績爲100的記錄,就會同時把這三個人的記錄都删除了。爲了避免發生(shēng)這種情況,我(wǒ)(wǒ)們一(yī)般都依據數據類型爲“自動編号”的字段,因爲自動編号字段是絕對不會重複的,比如這裏的“xuhao”。
按照我(wǒ)(wǒ)的開(kāi)發習慣,我(wǒ)(wǒ)們還是先來寫後台,請在“zonghe.asp”寫如下(xià)代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立數據庫鏈接對象
lianjie = Server.CreateObject("ADODB.Connection");
//打開(kāi)數據庫
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//創建“記錄集”
rs = Server.CreateObject("ADODB.Recordset");
//設置一(yī)個選項變量,根據這個選項的值,來決定執行對應功能的代碼,這個變量來自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>
<%
//——————根據變量“xuanxiang”決定調用對應的函數
if(xuanxiang=="顯示"){
//查詢顯示記錄演示
xianshi();
}else if(xuanxiang=="删除"){
//删除記錄演示
shanchu();
}
%>
<%
//——————定義“顯示”的功能函數
function xianshi(){
//查詢的SQL語句
sql="select * from shujubiao order by xuhao desc";
//執行數據庫查詢
rs.Open(sql, lianjie, 3);
//從FLASH接收當前頁碼
var dangqianye=Request("dangqianye_flash");
//從FLASH接收每頁顯示的記錄條數
var meiyejilu=Request("meiyejilu_flash");
//聲明一(yī)個變量用來存儲要輸出的内容,初始爲空
var shuchuneirong="";
//設置每頁顯示的記錄條數
rs.PageSize=meiyejilu;
//設置當前顯示的頁碼
rs.AbsolutePage=dangqianye;
//獲取記錄總條數
var zongtiaoshu=rs.RecordCount;
//獲取總頁數
var zongyeshu=rs.PageCount;
//利用循環顯示一(yī)頁的所有内容,具體(tǐ)的頁碼在第二段代碼的“rs.AbsolutePage”中(zhōng)指定了
for (i=0;i<meiyejilu;i++){
if(!rs.EOF){
//獲取字段内容
var xuhao=rs("xuhao");
var xingming=rs("xingming");
var yuwen=rs("yuwen");
var shuxue=rs("shuxue");
//将要顯示的内容記錄在“shuchuneirong”中(zhōng)
shuchuneirong =shuchuneirong+"<br>序号:"+ xuhao +" | 姓名:"+xingming+" | 語文:"+yuwen+" | 數學:"+shuxue;
rs.MoveNext();
}
}
//将查詢出來的内容輸出成變量/值配對形式
Response.Write("&neirong_asp="+shuchuneirong);
//輸出總條數
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//輸出總頁數
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>
<%
//——————定義“删除”的功能函數
function shanchu(){
//接收從FLASH傳遞過來的序号ID
var id=Request("xuhao_flash");
//删除的SQL語句
sql="delete from shujubiao where xuhao="+id;
//執行數據庫查詢
rs.Open(sql, lianjie, 3);
}
%>
說明:對比上一(yī)節給出的ASP代碼,眼尖的朋友一(yī)定會發現有幾處不同:
最後一(yī)段關閉連接的代碼沒了,爲什麽要删除呢?這是爲了在同一(yī)個ASP文件中(zhōng)多次利用一(yī)個連接對象和recordset對象。其實正規的寫法裏,是不推薦這麽做的,這裏隻是爲了演示和講解方便,大(dà)家以後自己做留言本的時候,建議每個功能函數裏都重新聲明連接對象和recordset對象,并在函數結尾關閉。
最後一(yī)段加了一(yī)個“shanchu”函數,它接收從FLASH傳遞過來的記錄序号,并執行删除語句。
在第三段的功能邏輯代碼區,調用“shanchu”函數。
xianshi”函數中(zhōng)的SQL語句最後加了一(yī)段:“order by xuhao desc”,這是讓記錄按xuhao字段倒序排列,這個是爲以後“添加”功能服務的,它可以讓最新添加的記錄顯示在最上邊,便于我(wǒ)(wǒ)們觀察。這裏我(wǒ)(wǒ)們可以先不用理會它。
好的,後台文件搞定了,現在回到FLASH中(zhōng)徹底完成我(wǒ)(wǒ)們的删除功能吧:)
打開(kāi)“zonghe.fla”,輸入下(xià)面的代碼:
//================系統初始化=================
//——————界面初始化
//編碼
System.useCodepage = true;
//——————變量初始化
//聲明一(yī)個“選項”變量,ASP中(zhōng)将根據這個變量決定當前演示的是那項功能
//初始化這個變量爲“顯示”,用來顯示記錄
var xuanxiang = "顯示";
//當前頁初始爲第1頁
var dangqianye = 1;
//每頁記錄數初始爲5條
var meiyejilu = 5;
//——————數組初始化
//——————對象初始化
//LV對象,從上到下(xià)依次用于“顯示”,“删除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================邏輯功能區==================
//——————顯示功能測試
xianshi();
//——————删除功能測試
shanchu_btn.onRelease = function() {
shanchu();
};
//================函數模塊區==================
//——————“顯示”功能
function xianshi() {
//将選項設置爲“顯示”
xuanxiang = "顯示";
//LV對象獲取“選項”内容
xianshi_lv.xuanxiang_flash = xuanxiang;
//獲取“當前頁”
xianshi_lv.dangqianye_flash = dangqianye;
//獲取“每頁記錄數”
xianshi_lv.meiyejilu_flash = meiyejilu;
//将以上獲取的内容傳遞給FLASH
xianshi_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), xianshi_lv, "post");
//加載完成後顯示一(yī)系列相關信息
xianshi_lv.onLoad = function(chenggong) {
if (chenggong) {
//顯示當前頁(直接從FLASH獲得)
dangqianye_txt.text = dangqianye;
//顯示每頁記錄數(直接從FLASH獲得)
meiyetiaoshu_txt.text = meiyejilu;
//顯示總條數,總頁數和本頁的記錄内容
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() {
//将“選項”設置爲“删除”
xuanxiang = "删除";
//将設定爲“删除”的“選項”記錄在用于删除的LV對象
shanchu_lv.xuanxiang_flash = xuanxiang;
//獲得要删除的記錄序号也記錄在LV對象中(zhōng)
shanchu_lv.xuhao_flash = shanchuxuhao_txt.text;
shanchu_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), shanchu_lv, "post");
shanchu_lv.onLoad = function() {
//根據ASP傳回來的“成功”進行對應操作
if (shanchu_lv.chenggong_asp == "成功") {
shanchuxuhao_txt.text = "删除成功";
//最後調用“顯示”函數,在“neirong_txt”文本框中(zhōng)刷新内容顯示
xianshi();
} else {
shanchuxuhao_txt.text = "删除失敗";
}
};
}
說明:上面FLASH中(zhōng)的代碼我(wǒ)(wǒ)們可以對比着ASP中(zhōng)的代碼來看,ASP中(zhōng)添加了删除功能,FLASH中(zhōng)最後一(yī)段便對應的添加了一(yī)個“shanchu”函數,這個函數中(zhōng)的代碼,相信大(dà)家現在參照着注釋應該能夠理解了吧。然後是“功能邏輯區”通過“删除”按鈕調用删除函數。最後還有一(yī)點小(xiǎo)小(xiǎo)的改動,我(wǒ)(wǒ)在這裏就不考察大(dà)家的眼力了,大(dà)家注意看,我(wǒ)(wǒ)在“xianshi”函數中(zhōng)的第一(yī)行添加了一(yī)句:xuanxiang="顯示"。這是爲了讓“xianshi”函數更加獨立,在“shanchu”函數中(zhōng),當删除完成後,我(wǒ)(wǒ)調用了“xianshi”函數,以便讓大(dà)家在FLASH中(zhōng)及時看到删除後的結果,如果“xianshi”中(zhōng)沒有定義“xuanxiang”,則在“shanchu”函數中(zhōng)調用“xianshi”函數時,“xuanxiang”的值依然爲“shanchu”,這樣ASP中(zhōng)的“xianshi”函數就無法獲得正确的參數,而顯示删除後的内容了。
好的,說了那麽多,激動人心的時刻到來了,讓我(wǒ)(wǒ)們在IIS下(xià)打開(kāi)“zonghe.html”測試一(yī)下(xià)吧。剛打開(kāi)你會看到正确的頁碼和内容顯示,然後,你在删除的輸入文本框中(zhōng)輸入“13”,按“删除”按鈕,當這個輸入文本框提示“删除成功”後,你馬上會看到“記錄總數”由原來的13變成了12,内容文本框中(zhōng)“xuhao”爲13的記錄消失了。可憐的“趙微”就這樣被我(wǒ)(wǒ)們輕輕一(yī)點就淘汰出局了:)
經過這次“删除”功能的演示,相信大(dà)家已經對我(wǒ)(wǒ)的思路和功能擴展的方法有了一(yī)定的了解。下(xià)面我(wǒ)(wǒ)将一(yī)次性完成“添加”和“更新”功能演示!
第四步,“添加”和“更新”功能:
這一(yī)步我(wǒ)(wǒ)就不再貼代碼了,大(dà)家直接下(xià)載源文件看吧,因爲實在沒什麽好講的了,這一(yī)步需要做的就是按着上一(yī)步的模式,分(fēn)别在ASP和FLASH添加對應的函數塊兒,然後再在“邏輯功能區”調用對應的功能函數就行了。都說一(yī)個組織良好的程序一(yī)開(kāi)始比較複雜(zá),越往後寫反而越輕松,我(wǒ)(wǒ)想一(yī)篇好的教程也應該一(yī)樣吧:)
★小(xiǎo)總結:這篇教程到這裏核心内容基本上講完了,一(yī)個FLASH留言本的基本功能也差不多都實現了,但想象和成品的距離(lí)其實是咫尺天涯,想做一(yī)個功能完善的FLASH留言本,遠不止我(wǒ)(wǒ)講的這些内容,這裏面還有很多技巧和細節,主要還是看你AS和ASP的基本功!反正捕魚的方法我(wǒ)(wǒ)是傾囊相授了,能不能捕到魚,還是要通過大(dà)家自己的實踐和努力。其實我(wǒ)(wǒ)留給大(dà)家的作業還是很多的,包括翻頁處理,管理登陸等等,但隻要你真的領會我(wǒ)(wǒ)前面講的原理了,要自己做出來理論上确實不難。可如果你現在還是一(yī)點頭緒都沒有,恐怕很有必要把我(wǒ)(wǒ)的教程再從頭到尾重新看一(yī)遍了,用很長時間隻學會一(yī)個知(zhī)識點不可怕,怕就怕你用很長時間學了很多知(zhī)識點,卻沒一(yī)個真正學會!
最後如果有誰通過自己的努力做出真正屬于自己的FLASH留言本了,别忘了貼上來讓火(huǒ)山和同志(zhì)們一(yī)起欣賞欣賞,火(huǒ)山也算沒白(bái)忙活這麽長時間了:)
LV與ASP綜合運用之一(yī):http://www.blueidea.com/articleimg/2006/12/4340/demo04.rar
昨天寫完上一(yī)節沒什麽事就在論壇到處逛,偶然發現一(yī)個帖子,是經典前斑竹“手工(gōng)感情”寫的,其中(zhōng)總結了FLASH與ASP通訊的三種常見方法,包括loadVariables,LoadVars和XML,跟貼還有一(yī)些比較深入的讨論,我(wǒ)(wǒ)覺得很好,大(dà)家對哪種方式有興趣的話(huà)不妨看一(yī)下(xià)前輩的帖子,火(huǒ)山這裏就不再唠叨了。隻有一(yī)種方式他們沒提到,就是getURL,下(xià)面我(wǒ)(wǒ)就着重講一(yī)下(xià)這種通訊方式。
手工(gōng)感情斑竹的教程:http://bbs.blueidea.com/viewthread.php?tid=1113968&highlight=
借這個教程,我(wǒ)(wǒ)們再來一(yī)起悼念一(yī)下(xià)這位無私奉獻的前輩——藍(lán)色每一(yī)位無私奉獻者都不應當被遺忘!
繼續我(wǒ)(wǒ)的教程,getURL的特别之處在于它能打開(kāi)一(yī)個新的ASP網頁,并使這個網頁接收到傳遞的變量,這樣ASP網頁就能根據這個變量進行各種設置和顯示了,我(wǒ)(wǒ)的FLASH BLOG中(zhōng)就利用了這個技術。遺憾的是,getURL無法指定傳遞變量的個數,它會非常機械的把同一(yī)層級下(xià)的所有變量都傳遞給ASP,如果你把調用getURL函數的語句和大(dà)量其它AS語句都混在一(yī)起,勢必會傳遞大(dà)量垃圾變量,解決的方法是把要傳遞的變量和調用getURL函數的語句都寫在一(yī)個獨立的MC中(zhōng)。下(xià)面我(wǒ)(wǒ)簡單演示一(yī)下(xià)它的用法:
1,先在同一(yī)目錄下(xià)建立一(yī)個“geturl.asp”文件和“geturl.fla”文件。
2,在“geturl.asp”中(zhōng)輸入下(xià)面的代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//接收變量
var neirong1=Request("neirong1_flash");
var neirong2=Request("neirong2_flash");
var neirong3=Request("neirong3_flash");
//顯示變量内容
Response.Write("内容1的值是"+neirong1+"<br>");
Response.Write("内容2的值是"+neirong2+"<br>");
Response.Write("内容3的值是"+neirong3);
%>
3,再在“geturl.fla”中(zhōng)建立一(yī)個按鈕“anniu_btn”,并在貞上寫代碼:
var neirong1_flash = "neirong1";
var neirong2_flash = "neirong2";
anniu_btn.onRelease = function() {
getURL("geturl.asp", "_blank", "get");
};
這樣前期工(gōng)作就完成了,下(xià)面我(wǒ)(wǒ)們來進行一(yī)系列對比性的測試:
①直接發布測試,當我(wǒ)(wǒ)們點擊按鈕的時候,會發現新打開(kāi)了“geturl.asp”,頁面顯示:
内容1的值是neirong1
内容2的值是neirong2
内容3的值是undefined
看來我(wǒ)(wǒ)們确實接收到變量neirong1_flash和neirong2_flash了,由于neirong3_flash我(wǒ)(wǒ)們在FLASH中(zhōng)沒有定義,所以ASP中(zhōng)得到undefined。現在我(wǒ)(wǒ)們注意觀察ASP網頁的URL後綴:
?neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2
這個後綴經過了URL編碼,翻譯過來其實是:
?neirong1_flash=neirong1&neirong2_flash=neirong2
它的格式大(dà)家是不是覺得非常熟悉呢?答對了!就是我(wǒ)(wǒ)們在前面一(yī)直強調的“變量/值”配對,它的變量傳遞原理與LV遵循的是同一(yī)規則!怎麽樣?現在體(tǐ)會到什麽是一(yī)通百通,觸類旁通了吧:)需要解釋的一(yī)點是,當傳遞多個“變量/值”對的時候,他們之間用“&”分(fēn)隔,與TXT中(zhōng)的數據格式又(yòu)相同了。
②把“geturl.fla”中(zhōng)“getURL”函數中(zhōng)的“get”傳遞方式改爲“post”再測試一(yī)下(xià),你會發現ASP網頁在浏覽器URL中(zhōng)的後綴沒有了,但網頁顯示結果不變。
③現在我(wǒ)(wǒ)們再把“geturl.fla”中(zhōng)“getURL”函數改成下(xià)面的形式:
getURL("geturl.asp?neirong3_flash=neirong3", "_blank", "get");
發布測試,我(wǒ)(wǒ)們會發現點擊按鈕後,打開(kāi)的ASP網頁顯示内容發生(shēng)了變化,neirong3接收到了值,網頁顯示内容如下(xià):
内容1的值是neirong1
内容2的值是neirong2
内容3的值是neirong3
再觀察浏覽器URL後綴:
?neirong3_flash=neirong3&neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2
可以發現多了一(yī)個“neirong3_flash=neirong3&”,而且它沒進行URL編碼,這點火(huǒ)山也不太理解,爲什麽把變量直接寫在ASP文件調用語句中(zhōng)就不進行URL編碼了呢?希望有前輩高手點明,先替大(dà)家一(yī)起謝謝了。
這裏需要重點提示的是:以前見有些人說“getURL”函數可以通過在調用的文件名後加參數來傳遞指定的變量,這其實是視覺上的誤導。getURL永遠都是傳遞所有的變量,隻不過那些垃圾變量,如果你不測試的話(huà),無法看到它們而已。
④最後再送大(dà)家一(yī)個大(dà)禮來給這篇教程畫上一(yī)個完美的句号,這個禮物(wù)是“測試的思考方式”:
變量有三個
變量傳遞的寫法有兩種:直接寫在文件名後或者在時間軸聲明并賦值
變量傳遞的方式有兩種:get和post
所以測試的可能性一(yī)共就有:3*2*2=12種,我(wǒ)(wǒ)隻做了4種代表性的,其它的留給讀者自己。
呵呵,怎麽樣,這種思想很容易理解吧?可惜道理大(dà)家都懂,實踐總是很難!
文章來源:http://www.blueidea.com/tech/multimedia/2006/4340.asp
免責聲明:本站相關技術文章信息部分(fēn)來自網絡,目的主要是傳播更多信息,如果您認爲本站的某些信息侵犯了您的版權,請與我(wǒ)(wǒ)們聯系,我(wǒ)(wǒ)們會即時妥善的處理,謝謝合作!