日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

[转]FLASH与ASP通信入门教程

發(fā)布時(shí)間:2023/12/19 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 [转]FLASH与ASP通信入门教程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

★經(jīng)常有人問(wèn)我FLASH留言板的制作方法,無(wú)奈這東西一句兩句沒(méi)辦法說(shuō)清楚,于是就萌發(fā)了寫教程的想法。可后來(lái)又一想,授人以魚,不如授人以漁,還不如集中精力好好講將FLASH與ASP的通訊原理,原理通了,具體項(xiàng)目就可以自由發(fā)揮了。

★我這個(gè)教程面向初級(jí)群體,在開始教程之前,我假設(shè)你已經(jīng)具備FLASH操作基礎(chǔ)知識(shí),了解IIS配置以及運(yùn)行環(huán)境。盡管FLASH與ASP通信方式有很多,但這篇教程中我選擇使用LoadVars類,一因?yàn)長(zhǎng)oadVars類容易掌握,易于講解;二是因?yàn)樗粻砍短嗥渌矫娴闹R(shí)。另外,我在ASP中采用的是JS腳本,因?yàn)镴S腳本跟AS非常像,只要你有一定的AS基礎(chǔ),JS不用學(xué)就可以基本看懂了。最后是FLASH版本,我選擇flash pro 8.0簡(jiǎn)體中文版,swf發(fā)布為AS2.0,flashplayer8.0。

★在看我的教程之前,建議先抽出幾分鐘閱讀一下“火山基礎(chǔ)開發(fā)習(xí)慣2006”,這樣更有利于理解我的代碼。
http://www.huoshan.org/houtai/blogv3/wenzhanghtm.asp?id_flash=80

★目錄:
→LoadVars類基礎(chǔ)講解(LoadVars類以下簡(jiǎn)稱LV)
→ASP中基本的輸入輸出
→LV與ASP通訊原理
→ASP操作數(shù)據(jù)庫(kù)入門
→LV與ASP綜合運(yùn)用
→其它通訊方式原理淺談

★L(fēng)V類基礎(chǔ)講解

→這里我主要圍繞我的教程進(jìn)行講解,區(qū)別有些全盤灌輸?shù)慕坛蹋覍⒂姓鎸?duì)性的著重講此類的兩個(gè)方法和一個(gè)事件:load、loadAndSend方法,和onLoad事件。如果你需要更詳細(xì)的了解LV類,建議你查一下幫助:幫助→flash幫助→全部書籍→ActionScript 2.0 語(yǔ)言參考→ActionScript 類→LoadVars。當(dāng)然你也可以直接搜索LoadVars。

→LV與TXT通訊。
不是要講ASP嗎?怎么講起TXT了?呵呵,先別急,其實(shí)LV跟ASP通訊原理與跟TXT通訊原理是一樣的。TXT大家經(jīng)常用,講起來(lái)比較容易理解。
LV跟TXT通訊需要在TXT中采用“變量”/“值”配對(duì)的數(shù)據(jù)模式。比如:wenben=我要做FLASH留言本。這里“wenben”就是變量,“我要做FLASH留言本”就是值,而“=”就是它們的配對(duì)方式,也就是建立聯(lián)系的方式。 好了,現(xiàn)在我們建立一個(gè)“l(fā)v_shiyan.txt”文本文件,并在其中輸入:neirong_txt=我要做FLASH留言本。然后在同文件夾下再建立一個(gè)“l(fā)v_shiyan.fla”,在第一貞寫代碼:

[Copy to clipboard]
CODE:
//設(shè)置編碼,不然會(huì)顯示亂碼
System.useCodepage = true;
//實(shí)例化一個(gè)LV對(duì)象
var shiyan_lv = new LoadVars();
//載入外部文本
shiyan_lv.load("lv_shiyan.txt");
//載入成功后
shiyan_lv.onLoad = function(chenggong) {
if (chenggong) {
//獲取外部文本內(nèi)容
var neirong = shiyan_lv.neirong_txt;
//輸出文本內(nèi)容
trace("您載入的文本內(nèi)容是:"+neirong);
}else{
//加載失敗給予提示
trace("加載失敗");
}
};

運(yùn)行上面的代碼,你會(huì)在輸出面板中看到“您載入的文本內(nèi)容是:我要做FLASH留言本”,由此可見(jiàn),外部“l(fā)v_shiyan.txt”中的內(nèi)容已經(jīng)成功加載。有興趣的朋友可以改動(dòng)一下TXT文件名,試驗(yàn)一下加載失敗的情況。

→通過(guò)上面的代碼,我們學(xué)到以下知識(shí):
1,如何實(shí)例化一個(gè)LV對(duì)象(使用new關(guān)鍵字)
2,如何用LV對(duì)象加載外部文本文件(使用load方法)
3,如何判斷外部文本文件是否加載成功(使用onLoad事件)
4,當(dāng)外部文本文件加載成功后,如何獲取并利用其內(nèi)容。
在外部文本文件中,我們之所以使用“變量/值”配對(duì)的數(shù)據(jù)格式,正是為了被LV對(duì)象利用,當(dāng)外部文本文件加載成功后,其中的變量就會(huì)被LV對(duì)象記錄,而在AS中通過(guò)LV對(duì)象引用外部變量的方式則為:LV對(duì)象.外部文本文件中的變量名字。上面的代碼中即為:shiyan_lv.neirong_txt。

→上面的例子中講了LV與TXT通訊的基本原理,現(xiàn)在我們來(lái)擴(kuò)展一下,如果我們想在一個(gè)外部TXT中使用多個(gè)變量如何做呢?答案其實(shí)很簡(jiǎn)單,我們只需在TXT中使用多個(gè)“變量/值”對(duì),并把每個(gè)“變量/值”對(duì)用“&”進(jìn)行分隔。我們依然利用上面示例的“l(fā)v_shiyan.txt”文件,這次把里面的內(nèi)容換成下面的形式:
neirong1_txt=戰(zhàn)勝LoadVar類!&neirong2_txt=戰(zhàn)勝ASP!&neirong3_txt=我能做FLASH留言板了!
然后再把“l(fā)v_shiyan.fla”中的代碼換成下面的內(nèi)容:

[Copy to clipboard]
CODE:
System.useCodepage = true;
var shiyan_lv = new LoadVars();
shiyan_lv.load("lv_shiyan.txt");
shiyan_lv.onLoad = function(chenggong) {
if (chenggong) {
//獲取外部文本內(nèi)容
var neirong1 = shiyan_lv.neirong1_txt;
var neirong2 = shiyan_lv.neirong2_txt;
var neirong3 = shiyan_lv.neirong3_txt;
//輸出文本內(nèi)容
trace("您載入的文本內(nèi)容是:"+neirong1+"/"+neirong2+"/"+neirong3);
}else{
trace("加載失敗");
}
};

運(yùn)行上面的代碼,在輸出窗口我們可以看到“戰(zhàn)勝LoadVar類!/戰(zhàn)勝ASP!/我能做FLASH留言板了!”,說(shuō)明我們獲得了外部TXT中全部的變量?jī)?nèi)容。

→有興趣的朋友可以把“l(fā)v_shiyan.txt”中的內(nèi)容改成下面的形式看輸出結(jié)果有沒(méi)有變化:
&neirong1_txt=戰(zhàn)勝LoadVar類!
&neirong2_txt=戰(zhàn)勝ASP!
&neirong3_txt=我能做FLASH留言板了!
然后再改成下面的結(jié)果再試驗(yàn)一下輸出結(jié)果:)
&neirong1_txt=戰(zhàn)勝LoadVar類!&
&neirong2_txt=戰(zhàn)勝ASP!&
&neirong3_txt=我能做FLASH留言板了!&
原因其實(shí)很簡(jiǎn)單,自己思考一下拉:)

→呼呼,好了,LV類先講到這里了,下面講講ASP的基本格式和語(yǔ)法,尤其是輸入輸出語(yǔ)句。

★ASP中基本的輸入輸出

→ASP經(jīng)過(guò)長(zhǎng)時(shí)間的積淀,其內(nèi)容非常豐富,但如果僅是為了開發(fā)一個(gè)簡(jiǎn)易的留言本,那只需要掌握最基本的輸入輸出就可以了。

→我們新建一個(gè)asp_jichu.asp文件,在里面輸入“★ASP中基本的輸入輸出”,然后保存。OK,這樣我們就創(chuàng)建一個(gè)ASP文件了。怎么樣?十分簡(jiǎn)單吧:)然后我們?cè)贗IS下運(yùn)行這個(gè)ASP文件,就會(huì)看到網(wǎng)頁(yè)上顯示“★ASP中基本的輸入輸出”。內(nèi)容雖然能顯示,但這樣的顯示對(duì)我們幾乎沒(méi)有任何作用。ASP為何為ASP?主要是因?yàn)樗芡瓿煞?wù)器與客戶端的交互,比如它能接收客戶端發(fā)送的變量,并根據(jù)這些變量以特定的方式顯示客戶需要的信息。而上面的“asp_jichu.asp”,并沒(méi)有起到任何交互作用,也就失去了ASP的意義。

→在正式開始交互講解之前,還有必要先講一下ASP文件的組成。ASP文件的構(gòu)成只用一句話就能概括:所有的ASP語(yǔ)句都以“<%”開始,以“%>”結(jié)束。還有一點(diǎn)需要提示的是,在IIS中,一般默認(rèn)ASP使用VBScript,但我們使用的是javascript,所以在ASP文件一開始,我們需要加上一句:<%@LANGUAGE="JAVASCRIPT"%>

→切入重點(diǎn),首先講如何向ASP傳遞變量。方法有兩種,即常見(jiàn)的GET和POST方法。GET方法適用于傳遞少量?jī)?nèi)容,一般在2K以內(nèi),變量及內(nèi)容會(huì)附加在網(wǎng)址后面,變量以“?”開頭,變量和內(nèi)容之間同樣遵循上一篇中講的“變量/值”配對(duì)原則。而POST方法,能夠傳遞大量?jī)?nèi)容,且內(nèi)容不會(huì)顯示在網(wǎng)址中。雖然GET方式傳遞的內(nèi)容少,而且不安全,但用來(lái)做教程演示卻非常直觀。現(xiàn)在我就用這種方式來(lái)演示ASP如何接收變量。還是利用我們開始建立的那個(gè)“asp_jichu.asp”文件,在其中輸入如下內(nèi)容并保存:

[Copy to clipboard]
CODE:
★ASP中基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//獲取網(wǎng)址中變量的內(nèi)容
neirong=Request("neirong_wangzhi");
//顯示變量?jī)?nèi)容
Response.Write("地址欄傳遞過(guò)來(lái)的內(nèi)容是:"+neirong);
%>

然后在IIS下運(yùn)行這個(gè)文件,我們會(huì)看到網(wǎng)頁(yè)中顯示:

QUOTE:
★ASP中基本的輸入輸出
地址欄傳遞過(guò)來(lái)的內(nèi)容是:undefined

首先我需要對(duì)“asp_jichu.asp”中的語(yǔ)句進(jìn)行一下講解,在ASP中,用來(lái)接收資料的是“Request”對(duì)象,而用來(lái)輸出內(nèi)容的是則是“Response”對(duì)象的“Write”方法。需要注意的是,Request接收變量時(shí),需要加上引號(hào),而Response輸出變量時(shí),則不需要。這樣一講,上面的代碼便不難理解,一開始我們定義一個(gè)變量“neirong”,然后用它記錄傳遞給ASP的變量“neirong_wangzhi”中的內(nèi)容,最后輸出“neirong”。但是我們并沒(méi)有對(duì)“neirong_wangzhi”進(jìn)行賦值,所以得到了“undefined”。現(xiàn)在我們就使用GET方法對(duì)變量“neirong_wangzhi”進(jìn)行賦值,看看效果如何。

前面已經(jīng)講過(guò)了,GET方法傳遞的變量及內(nèi)容會(huì)在瀏覽器網(wǎng)址中顯示,其實(shí)這個(gè)顯示是一個(gè)中間過(guò)程,ASP正是根據(jù)這個(gè)中間過(guò)程,也就是地址欄中的信息來(lái)接收變量并進(jìn)行處理最后輸出內(nèi)容的。所以我們完全可以利用這個(gè)中間過(guò)程,直接在瀏覽器地址欄中進(jìn)行變量賦值。打開運(yùn)行中的“asp_jichu.asp”,并在網(wǎng)址最后加上下面的內(nèi)容,按回車鍵,看網(wǎng)頁(yè)中有何變化?

[Copy to clipboard]
CODE:
?neirong_wangzhi=我要自己做FLASH留言板

哈哈,你看到了嗎?這時(shí)網(wǎng)頁(yè)中顯示:

QUOTE:
★ASP中基本的輸入輸出
瀏覽器傳遞過(guò)來(lái)的內(nèi)容是:我要自己做FLASH留言板

這說(shuō)明了什么?我們接收到地址欄里傳遞的變量?jī)?nèi)容了,我們成功了:)
疑!?你楞在那里干什么?怎么不跟我一起歡呼呢?是不是你GET傳遞方式還是不太明白?呵呵,沒(méi)關(guān)系,通過(guò)上面的演示,你只需要記住以下知識(shí)點(diǎn)就行了:
1,ASP文件的組成方式(所有的語(yǔ)句寫在“<%”和“%>”之間)
2,ASP如何接收外界傳遞的變量(使用Response對(duì)象)
3,ASP如何在瀏覽器中顯示內(nèi)容(使用Response的Write方法)
怎么樣,我的要求不高吧?只要記住以上三點(diǎn),你就應(yīng)該完全有信心看懂我下面的內(nèi)容了,加油!

友情提示:
我們把“asp_jichu.asp”文件中的內(nèi)容換成下面的形式看網(wǎng)頁(yè)中顯示的內(nèi)容會(huì)不會(huì)有變化?

[Copy to clipboard]
CODE:
★ASP中基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
neirong=Request("neirong_wangzhi");
%>
瀏覽器傳遞過(guò)來(lái)的內(nèi)容是:<%Response.Write(neirong)%>

再換成如下形式看有沒(méi)有變化?

[Copy to clipboard]
CODE:
★ASP中基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
neirong=Request("neirong_wangzhi");
%>
瀏覽器傳遞過(guò)來(lái)的內(nèi)容是:<%=neirong%>

我們會(huì)發(fā)現(xiàn)以上三種形式得到的結(jié)果都一樣,由此可見(jiàn)ASP的寫法是很靈活的,我們要抓住其本質(zhì),不要被各種表面形式迷惑:)這里需要說(shuō)明的是最后一種寫法的最后一行代碼。<%=neirong%>是一種輸出的簡(jiǎn)寫形式,它的作用相當(dāng)于Response.Write,僅適用于當(dāng)ASP語(yǔ)句只有一行,且僅輸出單純變量的情況下。

呼呼,ASP的知識(shí)暫時(shí)知道這么多就OK了,下面激動(dòng)人心的時(shí)刻來(lái)到了,我們要開始ASP和FLASH之間的交互了!

★L(fēng)V與ASP通訊原理

→經(jīng)過(guò)前兩節(jié)的學(xué)習(xí),我們已經(jīng)熟悉了LV類的使用,以及ASP的基本格式和輸入輸出了。現(xiàn)在我們就來(lái)看看這兩樣?xùn)|西是怎么融合到一起的。還記得我在講LV類的基本知識(shí)時(shí)所舉的TXT那個(gè)例子嗎?LV與TXT通訊時(shí),TXT中的數(shù)據(jù)需要寫成“變量/值”配對(duì)的格式,其實(shí)必須寫成這種格式并不是由TXT決定的,它是由LV的特性決定的,也就是說(shuō),LV與文本文件通訊需要“變量/值”這種數(shù)據(jù)格式。ASP文件其實(shí)也是文本文件,ASP與LV進(jìn)行通訊的時(shí)候,它所輸出的內(nèi)容格式也就必須遵循“變量/值”配對(duì)的規(guī)則。

→好吧,讓我們從代碼中來(lái)一個(gè)直觀的體驗(yàn)吧,我們還用“★L(fēng)V類基礎(chǔ)講解”那一節(jié)中舉的那個(gè)傳遞多個(gè)變量的例子,還記得那個(gè)TXT文件的名字吧:“l(fā)v_shiyan.txt”,好的,現(xiàn)在我們直接把“l(fā)v_shiyan.txt”改成“l(fā)v_shiyan.asp”,同樣把“l(fā)v_shiyan.fla”代碼中shiyan_lv.load("lv_shiyan.txt")這句里的lv_shiyan.txt也替換為lv_shiyan.asp,然后直接在FLASH編輯環(huán)境中按Ctrl+Enter測(cè)試影片,我們發(fā)現(xiàn)輸出窗口輸出:“戰(zhàn)勝LoadVar類!/戰(zhàn)勝ASP!/我能做FLASH留言板了!”,跟修改之前一樣。
昏!這樣也可以!?這算什么?是FLASH與ASP的通訊嗎?怎么不需要IIS都行?那是FLASH與TXT通訊嗎?可人家的后綴名明明是“.asp”嘛!?其實(shí)這里火山也不是很明白,但我更偏向于把它理解成FLASH與ASP的通訊,只是因?yàn)檫@個(gè)ASP文件中沒(méi)有ASP語(yǔ)句,不需要IIS支持就能顯示內(nèi)容而已。如果你非要討個(gè)說(shuō)法,最保守的回答是:FLASH與文本文件的通訊:)

→呵呵:)好了,不忽悠大家了。上面那一段搞不清楚沒(méi)關(guān)系,其實(shí)我從TXT過(guò)渡到ASP的目的還是想更直觀的告訴大家:FLASH顯示ASP中的內(nèi)容跟TXT是一致的。只要我們想辦法把ASP輸出的數(shù)據(jù)格式搗鼓成“變量/值”配對(duì)就行了!

→在TXT中又繞了這么長(zhǎng)時(shí)間,大家著急了吧,好的,現(xiàn)在我要玩真的了,ASP正式登場(chǎng):
首先我們把“l(fā)v_shiyan.asp”中的內(nèi)容改成如下形式:

[Copy to clipboard]
CODE:
★L(fēng)V與ASP通訊原理<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
Response.Write("&neirong1_txt=戰(zhàn)勝LoadVar類!&neirong2_txt=戰(zhàn)勝ASP!&neirong3_txt=我能做FLASH留言板了!&");
%>

我們先在IIS下運(yùn)行一下,網(wǎng)頁(yè)中會(huì)顯示如下內(nèi)容:

QUOTE:
★L(fēng)V與ASP通訊原理
&neirong1_txt=戰(zhàn)勝LoadVar類!&neirong2_txt=戰(zhàn)勝ASP!&neirong3_txt=我能做FLASH留言板了!&

恩!?怎么那么眼熟啊,恭喜你,答對(duì)了,這不正是“l(fā)v_shiyan.txt”中的內(nèi)容嘛!只不過(guò)“★”后的標(biāo)題換成這節(jié)的標(biāo)題了:)好的,那么,聰明的你,現(xiàn)在是否已經(jīng)預(yù)料到我下一步想干什么呢?恭喜你,你又答對(duì)了,你怎么那么聰明呢,下一步當(dāng)然就是在FLASH中顯示這些數(shù)據(jù)拉。說(shuō)干就干,回到“l(fā)v_shiyan.fla”的編輯環(huán)境中,再次按Ctrl+Enter測(cè)試影片。哈哈,成功了!輸出窗口顯示:“戰(zhàn)勝LoadVar類!/戰(zhàn)勝ASP!/我能做FLASH留言板了!”,哈哈哈哈——哎!說(shuō)你呢,你笑什么?我高興是因?yàn)槲医K于又把你忽悠了,你笑什么呢?看看我們的“l(fā)v_shiyan.asp”文件,我們明明已經(jīng)寫了ASP語(yǔ)句了啊,可怎么還是不需要IIS支持就能直接在FLASH編輯環(huán)境中顯示呢?難道我們的FLASH軟件是在IIS下運(yùn)行的嗎?這當(dāng)然不可能,那到底怎么會(huì)事啊?嘿嘿:)好了,不頭痛大家了,其實(shí),在我們第一次把“l(fā)v_shiyan.txt”直接改成“l(fā)v_shiyan.asp”并運(yùn)行影片測(cè)試的時(shí)候,“l(fā)v_shiyan.asp”中的數(shù)據(jù)已經(jīng)被讀入內(nèi)存,后來(lái)盡管我們又把“l(fā)v_shiyan.asp”中的內(nèi)容改成了ASP特有的輸出格式,但由于文件名字沒(méi)改變,運(yùn)行影片測(cè)試的時(shí)候,F(xiàn)LASH還是會(huì)直接從內(nèi)存中提取已經(jīng)存儲(chǔ)過(guò)的內(nèi)容,而上次的內(nèi)容正好不需要IIS就能顯示,碰巧而已:)

那如何顯示新內(nèi)容呢?我們只需要利用隨機(jī)函數(shù)給ASP傳遞一個(gè)沒(méi)有實(shí)際意義的變量就可以了。我們可以把加載ASP的語(yǔ)句改成下面的樣子:

[Copy to clipboard]
CODE:
shiyan_lv.load("lv_shiyan.asp?bianliang="+random(9999));

現(xiàn)在再次在FLASH中測(cè)試影片,發(fā)現(xiàn)輸出窗口顯示以下提示:

QUOTE:
加載失敗
Error opening URL "file:///E|/flashlianxi/flash與asp練習(xí)/FLASH與ASP通訊入門級(jí)教程/lv_shiyan.asp?bianliang=5624"

恩!?又有問(wèn)題了,不是說(shuō)“bianliang”沒(méi)有實(shí)際意義嗎?怎么會(huì)導(dǎo)致“Error opening URL”呢?呵呵:)其實(shí)這里說(shuō)的“沒(méi)有實(shí)際意義”是針對(duì)ASP來(lái)說(shuō)的,更確切的說(shuō),是針對(duì)瀏覽器的,還記得我在“★ASP中基本的輸入輸出”一節(jié)中講的GET傳遞方式嗎?如果忘了一會(huì)兒可以回去復(fù)習(xí)下。其實(shí)我的建議是你先跟著我的進(jìn)度把每節(jié)徹底弄明白,等我寫完后,再通讀一邊,然后你就完全可以自己動(dòng)手做個(gè)留言板了。接上面的,既然這個(gè)“沒(méi)有實(shí)際意義”不是針對(duì)FLASH的,那FLASH肯定就不認(rèn)識(shí)了,它會(huì)把“l(fā)v_shiyan.asp?bianliang=5624”全部當(dāng)成文件名,所以當(dāng)然找不到這個(gè)文件了。

是該撥開云霧見(jiàn)晴天的時(shí)候了。現(xiàn)在我們先在“l(fā)v_shiyan.fla”中添加一個(gè)動(dòng)態(tài)文本域,并命名為“wenben_txt”,然后把輸出代碼改動(dòng)一下,讓本來(lái)在輸出窗口顯示的內(nèi)容顯示在動(dòng)態(tài)文本域里,具體改動(dòng)是把下面第一行代碼換成第二行:
trace("您載入的文本內(nèi)容是:"+neirong1+"/"+neirong2+"/"+neirong3);
wenben_txt.text = neirong1+"/"+neirong2+"/"+neirong3;
好了,最后再發(fā)布“l(fā)v_shiyan.swf”和“l(fā)v_shiyan.html”到與ASP文件相同的文件夾下,并在IIS下運(yùn)行“l(fā)v_shiyan.html”,你會(huì)看到SWF的動(dòng)態(tài)文本域里顯示“戰(zhàn)勝LoadVar類!/戰(zhàn)勝ASP!/我能做FLASH留言板了!”,現(xiàn)在你終于可以放心的歡呼了:我們終于可以把ASP輸出的內(nèi)容顯示在FLASH里了,哈哈……。

先喝口水吧,一眨眼快兩個(gè)小時(shí)了,我怎么寫的那么慢啊,加油加油!上面講的其實(shí)是ASP怎么向FLASH傳遞資料,這不是真正意義上的交互,交互是雙方互動(dòng)的,現(xiàn)在我們就來(lái)看看FLASH怎么向ASP傳遞資料。在此之前請(qǐng)保證你還記得我在“★ASP中基本的輸入輸出”一節(jié)中講的ASP是怎么接收一個(gè)變量的,我們還用那一節(jié)所用的“asp_jichu.asp”文件,當(dāng)時(shí)我是通過(guò)GET方式直接在瀏覽器地址欄中對(duì)“neirong_wangzhi”進(jìn)行賦值的,并且測(cè)試證明ASP確實(shí)通過(guò)Request接收到了這個(gè)變量的值。現(xiàn)在我們就是要讓FLASH做地址欄做的事,我們要通過(guò)FLASH對(duì)“neirong_wangzhi”進(jìn)行賦值。

在正式開始之前,我們還有以下工作要完成:
1,在“l(fā)v_shiyan.fla”中再添加一個(gè)按鈕,命名為“tijiao_btn”。
2,把“wenben_txt”這個(gè)動(dòng)態(tài)文本域改成輸入文本域,取消HTML輸出,并更名為:“shuru_txt”。
3,再添加一個(gè)動(dòng)態(tài)文本域,用來(lái)接收從ASP傳回的資料,命名為:“shuchu_txt”。
4,把“asp_jichu.asp”中的內(nèi)容改成下面的內(nèi)容:

[Copy to clipboard]
CODE:
★ASP中基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//獲取從FLASH傳遞過(guò)來(lái)的變量
neirong=Request("neirong_flash");
//輸出要返回到FLASH中的內(nèi)容
Response.Write("&fanhui_asp=哈,你輸入的內(nèi)容已經(jīng)傳遞給ASP,并且又已經(jīng)從ASP返回到FLASH了,你輸入的內(nèi)容是:"+neirong);
%>

5,最后把“l(fā)v_shiyan.fla”中的代碼改成下面的內(nèi)容:

[Copy to clipboard]
CODE:
System.useCodepage = true;
var shiyan_lv = new LoadVars();
tijiao_btn.onRelease = function() {
//獲得輸入的文本內(nèi)容,并把這個(gè)內(nèi)容記錄在變量“neirong_flash”中
//這里相當(dāng)于已經(jīng)對(duì)變量“neirong_flash”進(jìn)行了賦值
shiyan_lv.neirong_flash = shuru_txt.text;
//將LV對(duì)象中儲(chǔ)存的所有變量都傳遞給ASP,不過(guò)這里我們只設(shè)定了一個(gè),就是我們的“neirong_flash”
//向ASP傳遞成功后,我們?cè)侔褟腁SP傳遞回來(lái)的變量還儲(chǔ)存在“shiyan_lv”對(duì)象中
shiyan_lv.sendAndLoad("asp_jichu.asp?bianliang="+random(9999), shiyan_lv, "post");
};
shiyan_lv.onLoad = function(chenggong) {
if (chenggong) {
//輸出文本內(nèi)容
shuchu_txt.text = shiyan_lv.fanhui_asp;
} else {
//輸出文本內(nèi)容
shuchu_txt.text = "加載失敗";
}
};

呼呼,改的東西真不少啊,先不講代碼了,直接發(fā)布測(cè)試一下吧,先有個(gè)直觀的認(rèn)識(shí):在輸入文本框中輸入“我要做FLASH留言板”,然后點(diǎn)擊提交按鈕,你就會(huì)看到在動(dòng)態(tài)文本框“shuchu_txt”中馬上就會(huì)顯示:“哈,你輸入的內(nèi)容已經(jīng)傳遞給ASP,并且又已經(jīng)從ASP返回到FLASH了,你輸入的內(nèi)容是:我要做FLASH留言板”。這個(gè)例子的源文件也可以直接在下面下載。

小提示:如果你在瀏覽器中直接點(diǎn)擊刷新不能正確顯示更新后的頁(yè)面和內(nèi)容,請(qǐng)按如下方式設(shè)置IE瀏覽器:→工具→Internet選項(xiàng)→設(shè)置→鉤選“每次訪問(wèn)此頁(yè)時(shí)檢查”。這樣我們以后就可以直接利用刷新來(lái)測(cè)試,不用再擔(dān)心IIS刷新和內(nèi)存問(wèn)題了。

最后我們來(lái)對(duì)測(cè)試過(guò)程中的數(shù)據(jù)流程做一個(gè)系統(tǒng)的分析:
→用戶在FLASH的輸入文本框“shuru_txt”輸入“我要做FLASH留言板”
→通過(guò)“shiyan_lv.neirong_flash = shuru_txt.text;”這句代碼把用戶輸入的內(nèi)容儲(chǔ)存在“shiyan_lv”對(duì)象的“neirong_flash”
→通過(guò)“shiyan_lv”對(duì)象的“sendAndLoad”方法將它記錄的變量都傳遞給指定的ASP文件
→在ASP文件中通過(guò)“neirong=Request("neirong_flash");”這句代碼獲得從FLASH的“shiyan_lv”對(duì)象傳遞過(guò)來(lái)的變量“neirong_flash”
→ASP接收變量?jī)?nèi)容后調(diào)用Response對(duì)象的Write方法利用傳遞過(guò)來(lái)的變量?jī)?nèi)容以“變量/值”配對(duì)的格式輸出需要返回FLASH的新內(nèi)容
→FLASH在調(diào)用“shiyan_lv”對(duì)象的“sendAndLoad”方法發(fā)送變量時(shí)就已經(jīng)指定“shiyan_lv”本身接收返回的內(nèi)容
→“shiyan_lv”接收到新返回的內(nèi)容,并根據(jù)其“變量/值”配對(duì)的格式,將新內(nèi)容儲(chǔ)存在“shiyan_lv.fanhui_asp”中
→當(dāng)新返回的內(nèi)容在FLASH中加載完成后,調(diào)用“shiyan_lv”對(duì)象的onLoad事件
→通過(guò)“shuchu_txt.text = shiyan_lv.fanhui_asp;”這句代碼在輸出文本框中顯示新返回的內(nèi)容
經(jīng)過(guò)這個(gè)分析,相信大家應(yīng)該可以從總體上有一個(gè)理性的認(rèn)識(shí)了吧。

最后還需要重點(diǎn)強(qiáng)調(diào)的幾點(diǎn)是:
●LV對(duì)象在調(diào)用“sendAndLoad”方法發(fā)送變量的時(shí)候,會(huì)把LV對(duì)象中儲(chǔ)存的所有變量都發(fā)送給ASP。
●ASP在接收LV對(duì)象傳遞過(guò)來(lái)的變量時(shí),只需要在Request中使用與FLASH中相同的變量名字就可以了。
●ASP輸出的資料一定要使用“變量/值”配對(duì)的格式,因?yàn)橹挥休敵龀蛇@種格式,F(xiàn)LASH才能像處理TXT一樣將ASP輸出的資料分別記錄在幾個(gè)變量并保存在指定接收資料的LV對(duì)象中。
●如果我們想向FLASH傳遞兩個(gè)或者更多變量,我們可以在FLASH中這樣寫:(以傳遞三個(gè)變量為例)
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");
●傳遞大量資料時(shí),必須使用POST方法。
●如果我們想在FLASH中接收到多個(gè)從FLASH傳遞過(guò)來(lái)的變量,就按TXT的處理方式來(lái)就OK了。

→呼呼,喘口氣,這一節(jié)終于寫完了。本來(lái)計(jì)劃下次直接寫“LV與ASP綜合運(yùn)用”的,但現(xiàn)在想想,還是很有必要加上一節(jié)“ASP操作數(shù)據(jù)庫(kù)入門”,請(qǐng)繼續(xù)關(guān)注。有什么好的意見(jiàn)也可以提一下,希望通過(guò)大家的共同努力讓這篇教程能讓菜鳥以最快的速度,最少的障礙自己制作出真正屬于自己的FLASH留言板。

→還記得我們向ASP傳遞的那個(gè)無(wú)意義的變量“bianliang”嗎?既然我們向ASP傳遞了,那ASP就應(yīng)該能接收的到,有興趣的朋友可以在“asp_jichu.asp”中加一個(gè)接收變量的語(yǔ)句,測(cè)試一下效果。改動(dòng)后的ASP代碼如下:

[Copy to clipboard]
CODE:
★ASP中基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
var canshu;
//獲取網(wǎng)址中變量的內(nèi)容
neirong=Request("neirong_flash");
//獲取無(wú)意義的參數(shù)
canshu=Request("bianliang");
//顯示變量?jī)?nèi)容
Response.Write("&fanhui_asp=哈,你輸入的內(nèi)容已經(jīng)傳遞給ASP,并且又已經(jīng)從ASP返回到FLASH了,你輸入的內(nèi)容是:"+neirong+"。你傳遞的無(wú)意義的參數(shù)是:"+canshu);
%>

測(cè)試后發(fā)現(xiàn)真的可以接收到一個(gè)數(shù)字呢,而且每次點(diǎn)提交這個(gè)數(shù)字幾乎都不一樣,在0-9999之間變化。看來(lái)我們確實(shí)接收到FLASH傳遞過(guò)來(lái)的隨機(jī)變量了,可傳遞的時(shí)候,地址欄里怎么沒(méi)顯示呢?是因?yàn)檫@次我們采用了“POST”傳遞方式,這種方式用來(lái)傳遞大量資料,是不會(huì)在地址欄中顯示變量和它的值的。

下載例子

★ASP操作數(shù)據(jù)庫(kù)入門

→經(jīng)過(guò)前幾節(jié)的學(xué)習(xí),我們對(duì)LV類和ASP的輸入輸出應(yīng)該已經(jīng)很熟練了吧,而且我們也已經(jīng)了解了LV與ASP通訊的基本原理。這個(gè)原理可能并不復(fù)雜,不過(guò)如果你想利用它做出點(diǎn)東西來(lái),關(guān)鍵還是要看你ASP和FLASH的基本功了。遺憾的是這篇教程主要講述FLASH與ASP通訊原理,更詳細(xì)更高級(jí)的ASP和FLASH技巧,我恐怕不能多講,不然這篇教程不知道什么時(shí)候才能寫完,同時(shí)也會(huì)失去重點(diǎn)。這節(jié)我將簡(jiǎn)單的羅列一些ASP操作ACCESS數(shù)據(jù)庫(kù)的基本知識(shí),注意,我只是點(diǎn)到為止,更詳細(xì)的資料和講解網(wǎng)上很多,你可以自己去搜索。

→首先我們需要建立一個(gè)ACCESS數(shù)據(jù)庫(kù)文件,命名為“shujuku.mdb”,并在其中新建數(shù)據(jù)表,命名為“shujubiao”。數(shù)據(jù)表中字段名稱、字段類型和字段內(nèi)容如下圖所示。示例的數(shù)據(jù)庫(kù)可以在最后下載,下載后請(qǐng)保存起來(lái),因?yàn)槲乙院蟮闹v解都會(huì)用到它。


→然后在數(shù)據(jù)庫(kù)同文件夾下建立一個(gè)操作數(shù)據(jù)庫(kù)的ASP文件,命名為“caozuo.asp”,并輸入以下代碼:

[Copy to clipboard]
CODE:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立一個(gè)數(shù)據(jù)庫(kù)鏈接對(duì)象
lianjie = Server.CreateObject("ADODB.Connection");
//用已經(jīng)建立的數(shù)據(jù)庫(kù)鏈接對(duì)象打開數(shù)據(jù)庫(kù)
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//創(chuàng)建一個(gè)“記錄集”,即“Recordset”,它的任務(wù)是儲(chǔ)存從數(shù)據(jù)庫(kù)里提取出來(lái)的數(shù)據(jù)
rs = Server.CreateObject("ADODB.Recordset");
//創(chuàng)建查詢數(shù)據(jù)庫(kù)的SQL語(yǔ)句,這里將查出“shujubiao”中的所有數(shù)據(jù)
sql="select * from shujubiao";
//執(zhí)行數(shù)據(jù)庫(kù)查詢,最后的數(shù)字參數(shù)主要用來(lái)指定打開和查詢數(shù)據(jù)庫(kù)的方式,有興趣可以百度一下
rs.Open(sql, lianjie, 3);
%>

●說(shuō)明:上面的代碼,除了SQL語(yǔ)句外,每個(gè)ASP文件差不多都是類似的,主要用來(lái)初始和查詢數(shù)據(jù)。數(shù)據(jù)是提出來(lái)了,但如果你想要按自己方式使用它們,還是要借助JS腳本來(lái)實(shí)現(xiàn)。另外這里要著重說(shuō)一下SQL,SQL是專門用來(lái)查詢數(shù)據(jù)庫(kù)的語(yǔ)言,它可以按指定的規(guī)則查詢數(shù)據(jù)庫(kù)中指定的表和字段,功能強(qiáng)大,卻又非常容易理解,基本可以從字面意思猜出其功能來(lái),這一節(jié)的最后我會(huì)仔細(xì)講一下常用的SQL語(yǔ)句。

→現(xiàn)在先回到我們的ASP中,繼續(xù)在“caozuo.asp”中追加以下代碼:

[Copy to clipboard]
CODE:
<%
//當(dāng)前顯示的頁(yè)數(shù),這里設(shè)置為第一頁(yè)
var dangqianye=1;
//每頁(yè)顯示的記錄條數(shù),這里設(shè)置為5條
var meiyejilu=5;
//獲取記錄總條數(shù)
var zongtiaoshu=rs.RecordCount;
//設(shè)置每頁(yè)顯示的記錄條數(shù)
rs.PageSize=meiyejilu;
//設(shè)置當(dāng)前顯示的頁(yè)碼
rs.AbsolutePage=dangqianye;
//獲取總頁(yè)數(shù)
var zongyeshu=rs.PageCount;
//輸出總頁(yè)數(shù)、總條數(shù)、每頁(yè)記錄條數(shù)以及當(dāng)前頁(yè)碼
Response.Write("總條數(shù)為:"+zongtiaoshu+"<br>總頁(yè)數(shù)為:"+zongyeshu+"<br>每頁(yè)記錄條數(shù):"+meiyejilu+"<br>當(dāng)前頁(yè):"+dangqianye+"<br>");
%>

●說(shuō)明:先在IIS下運(yùn)行一下,你會(huì)看到網(wǎng)頁(yè)上顯示:

QUOTE:
總條數(shù)為:13
總頁(yè)數(shù)為:3
每頁(yè)記錄條數(shù):5
當(dāng)前頁(yè):1

有興趣的朋友可以自己修改一下“meiyejilu”的值,然后再運(yùn)行看看它和總頁(yè)數(shù)存在什么關(guān)系,相信聰明的你一定能找到其中的規(guī)律:)注意,這里我一直在用“rs”,在第一段舉例的代碼中我已經(jīng)注釋過(guò)了,“rs”是“Recordset”對(duì)象的一個(gè)實(shí)例,我們從數(shù)據(jù)庫(kù)里查詢出來(lái)的數(shù)據(jù)都會(huì)儲(chǔ)存在這個(gè)實(shí)例中,我們之所以這么做,是因?yàn)椤癛ecordset”對(duì)象有很多屬性和方法,方便我們使用,比如這里的“PageSize”和“AbsolutePage”。

→光顯示條數(shù)和頁(yè)數(shù)沒(méi)什么太大意義,我們要的是記錄中的內(nèi)容,好的,現(xiàn)在繼續(xù)追加以下代碼:

[Copy to clipboard]
CODE:
<%
//聲明一個(gè)變量用來(lái)存儲(chǔ)要輸出的內(nèi)容,初始為空
var shuchuneirong="";
//利用循環(huán)顯示一頁(yè)的所有內(nèi)容,具體的頁(yè)碼在第二段代碼的“rs.AbsolutePage”中指定了
for (i=0;i<meiyejilu;i++){
//if的作用下面再進(jìn)行說(shuō)明
if(!rs.EOF){
//獲取字段內(nèi)容
var xuhao=rs("xuhao");
var xingming=rs("xingming");
var yuwen=rs("yuwen");
var shuxue=rs("shuxue");
//一次循環(huán)將獲得一條記錄的所有內(nèi)容,然后把這條記錄追加到變量“shuchuneirong”中,這樣循環(huán)結(jié)束的時(shí)候,它將儲(chǔ)存本頁(yè)所有的記錄內(nèi)容
shuchuneirong =shuchuneirong+"<br>序號(hào):"+ xuhao +" | 姓名:"+xingming+" | 語(yǔ)文:"+yuwen+" | 數(shù)學(xué):"+shuxue;
//本次循環(huán)結(jié)束后,將記錄集指定到下一條記錄
//上面的if判斷將在這里發(fā)揮作用,當(dāng)我們顯示最后一頁(yè)的時(shí)候,剩余的記錄數(shù)很可能小于設(shè)定的每頁(yè)記錄數(shù)
//如果不加判斷,rs就很有可能溢出界限,從而導(dǎo)致錯(cuò)誤
rs.MoveNext();
}
}
//在網(wǎng)頁(yè)中按指定格式輸出本頁(yè)所有的記錄內(nèi)容
Response.Write(shuchuneirong);
//關(guān)閉記錄集對(duì)象
rs.Close();
//關(guān)閉連接對(duì)象
lianjie.Close();
%>

●說(shuō)明:啥都不說(shuō)了,保存并運(yùn)行吧,我們會(huì)在網(wǎng)頁(yè)中看到下面的輸出內(nèi)容:

QUOTE:
總條數(shù)為:13
總頁(yè)數(shù)為:3
每頁(yè)記錄條數(shù):5
當(dāng)前頁(yè):1

序號(hào):1 | 姓名:周星馳 | 語(yǔ)文:50 | 數(shù)學(xué):72
序號(hào):2 | 姓名:丘淑貞 | 語(yǔ)文:450 | 數(shù)學(xué):100
序號(hào):3 | 姓名:舒淇 | 語(yǔ)文:1000 | 數(shù)學(xué):2000
序號(hào):4 | 姓名:劉德華 | 語(yǔ)文:200 | 數(shù)學(xué):1000
序號(hào):5 | 姓名:小布什 | 語(yǔ)文:500 | 數(shù)學(xué):501

然后我們可以修改一下“dangqianye”,只要“當(dāng)前頁(yè)”小于等于“總頁(yè)數(shù)”,就能正確顯示本頁(yè)的內(nèi)容。其實(shí)現(xiàn)在很多FLASH留言本中的分頁(yè)就是用的這一原理,只不過(guò)到時(shí)候我們不可能像現(xiàn)在這樣手動(dòng)修改“AbsolutePage”的值,我們需要從FLASH傳遞頁(yè)碼值,然后在ASP中接收并賦值給“AbsolutePage”。哈哈!現(xiàn)在你是不是有點(diǎn)躍躍欲試了?先別急,因?yàn)槲疫€有一招入室絕學(xué)沒(méi)傳你呢,這套絕學(xué)就是那威震武林的SQL。

→說(shuō)練就練,但為了激發(fā)同學(xué)們學(xué)習(xí)的主動(dòng)性,下面我僅給出做一個(gè)簡(jiǎn)易留言本必備的SQL語(yǔ)句:

1,查詢語(yǔ)句
語(yǔ)法:select 字段名 from 數(shù)據(jù)表名 where 查詢條件 order by 排列方式 (不加desc從低到高排序,加上相反)
舉例:僅查詢“shujubiao”表中“xuhao”,“xingming”兩個(gè)字段,并且“xuhao”要大于3,結(jié)果按“xuhao”倒序排列:
SQL語(yǔ)句:select xuhao,xingming from shujubiao where xuhao>3 order by xuhao desc

2,刪除記錄
語(yǔ)法:delete from 數(shù)據(jù)表 where 條件
舉例:刪除“xingming”為“小布什”的記錄:
SQL語(yǔ)句:delete from shujubiao where xingming='小布什'

3,添加記錄
語(yǔ)法:insert into 數(shù)據(jù)表 (字段名) values (字段值)
舉例:插入一條新記錄,“xingming”為“火山”,“yuwen”為“100”,“shuxue”是“1000”:
SQL語(yǔ)句:insert into shujubiao (xingming, yuwen, shuxue) values ('火山',100,1000)
說(shuō)明:“xuhao”字段為“自動(dòng)編號(hào)類型”,不需要賦值。

4,更新記錄
語(yǔ)法:update 數(shù)據(jù)表 set 字段值=新值 where 條件
舉例:把“xuhao”為“1”的記錄中“xingming”字段改為“寂寞火山”,“yuwen”字段改為“200”
SQL語(yǔ)句:update shujubiao set xingming='寂寞火山',yuwen=200 where xuhao=1

有了以上四大護(hù)法,打敗FLASH留言板足夠了,建議大家親自動(dòng)手把我寫的例句放在“caozuo.asp”中實(shí)驗(yàn)一下,直觀的體驗(yàn)一下效果。測(cè)試時(shí),刷新頁(yè)面后你可能會(huì)看到頁(yè)面報(bào)錯(cuò),沒(méi)有關(guān)系,這并不影響SQL的執(zhí)行,這時(shí)你可以關(guān)閉數(shù)據(jù)表再打開就可以直接在數(shù)據(jù)庫(kù)中會(huì)看到效果了。只有第一個(gè)例子必須改動(dòng)一下ASP代碼,需要改那里才能使頁(yè)面正常顯示呢?嘿嘿,這個(gè)當(dāng)大家的小作業(yè)了,注意看頁(yè)面的錯(cuò)誤提示哦:)

→下星期就要生產(chǎn)實(shí)習(xí)了,一下就是三個(gè)星期,一定要趕在實(shí)習(xí)前完工,呼呼~~
其實(shí)講到這里,你完全應(yīng)該可以按著“LV與ASP通訊原理”一節(jié)中講的方法,自己想辦法把這節(jié)中在網(wǎng)頁(yè)里顯示的內(nèi)容傳遞到FLASH里顯示了,善于學(xué)習(xí)的朋友不妨自己先動(dòng)手試一下,看能做到什么程度:)

★L(fēng)V與ASP綜合運(yùn)用(一)

→這節(jié)是重點(diǎn),我寫教程的還不怕長(zhǎng)呢,大家也要堅(jiān)持住啊!這節(jié)將對(duì)前面講過(guò)的知識(shí)進(jìn)行一個(gè)綜合運(yùn)用。下面先回顧一下前面我們都掌握了哪些技能:

1,LV與外部文本文件通訊的基本原理(變量/值配對(duì))
2,ASP如何接收變量以及輸出內(nèi)容(Request和Response)
3,LV與ASP通訊基本原理(依舊是變量/值配對(duì)原理)
4,ASP操作數(shù)據(jù)庫(kù)基本技巧,包括:
①如何查詢并顯示數(shù)據(jù)表內(nèi)容
②如何刪除一條記錄
③如何添加一條新記錄
④如何更新一條記錄
⑤如何顯示記錄的總條數(shù)
⑥如何分頁(yè),翻頁(yè),以及顯示總頁(yè)數(shù),當(dāng)前頁(yè)碼和當(dāng)前頁(yè)內(nèi)容

現(xiàn)在請(qǐng)閉上眼睛想一下,一個(gè)簡(jiǎn)單的FLASH留言本所包含的內(nèi)容不就這么多嗎?如果我上面講的內(nèi)容你都掌握了,還有什么理由不能自己做一個(gè)留言板呢——什么?你沒(méi)有實(shí)戰(zhàn)經(jīng)驗(yàn)?好吧,這節(jié)我就連你這唯一的理由也消滅掉。這節(jié)中我將通過(guò)一個(gè)LV和ASP交互實(shí)例把上面講的內(nèi)容來(lái)一個(gè)融合。請(qǐng)大家先下載我提供的源文件,其中包含五個(gè)文件:zonghe.fla、zonghe.swf、zonghe.html、zonghe.asp還有上節(jié)中提供的數(shù)據(jù)庫(kù)文件shujuku.mdb。這是已經(jīng)做好的成品,大家不妨先刪除“zonghe.fla”AS貞和“zonghe.asp”中的所有代碼,跟著我的講解再一起來(lái)完成它,這樣你會(huì)有更系統(tǒng)更深刻的認(rèn)識(shí)。在此之前,你還非常有必要先在源文件中熟悉一下“zonghe.fla”里的界面布局及元件命名。為了方便講解,這里同時(shí)貼出“zonghe.swf”的界面圖示。

下面我們來(lái)逐步演示各項(xiàng)功能,首先是顯示記錄內(nèi)容及相關(guān)信息。

第一步:打開“zonghe.fla”,在最上層的AS貞中寫代碼:

[Copy to clipboard]
CODE:
//================系統(tǒng)初始化=================
//——————界面初始化
//——————變量初始化
//——————數(shù)組初始化
//——————對(duì)象初始化
//================邏輯功能區(qū)=================
//================函數(shù)模塊區(qū)=================

上面是我的習(xí)慣,先用注釋把代碼分好區(qū),然后逐步向各區(qū)中添加需要的代碼。

第二步:“顯示”記錄功能測(cè)試:
我個(gè)人習(xí)慣是:前臺(tái)界面→后臺(tái)單獨(dú)完成→前臺(tái)功能實(shí)現(xiàn)加后臺(tái)合成,所以先寫后臺(tái)。

1,在“zonghe.asp”中添加以下代碼:

[Copy to clipboard]
CODE:
<%@LANGUAGE="JAVASCRIPT"%>

<%
//建立數(shù)據(jù)庫(kù)鏈接對(duì)象
lianjie = Server.CreateObject("ADODB.Connection");
//打開數(shù)據(jù)庫(kù)
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)的值,來(lái)決定執(zhí)行對(duì)應(yīng)功能的代碼,這個(gè)變量來(lái)自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>

<%
//——————根據(jù)變量“xuanxiang”決定調(diào)用對(duì)應(yīng)的函數(shù)
//查詢顯示記錄演示
if(xuanxiang=="顯示"){
xianshi();
}
%>

<%
//——————定義“顯示”的功能函數(shù)
function xianshi(){
//查詢的SQL語(yǔ)句
sql="select * from shujubiao";
//執(zhí)行數(shù)據(jù)庫(kù)查詢
rs.Open(sql, lianjie, 3);
//從FLASH接收當(dāng)前頁(yè)碼
var dangqianye=Request("dangqianye_flash");
//從FLASH接收每頁(yè)顯示的記錄條數(shù)
var meiyejilu=Request("meiyejilu_flash");
//聲明一個(gè)變量用來(lái)存儲(chǔ)要輸出的內(nèi)容,初始為空
var shuchuneirong="";
//設(shè)置每頁(yè)顯示的記錄條數(shù)
rs.PageSize=meiyejilu;
//設(shè)置當(dāng)前顯示的頁(yè)碼
rs.AbsolutePage=dangqianye;
//獲取記錄總條數(shù)
var zongtiaoshu=rs.RecordCount;
//獲取總頁(yè)數(shù)
var zongyeshu=rs.PageCount;
//利用循環(huán)顯示一頁(yè)的所有內(nèi)容,具體的頁(yè)碼在第二段代碼的“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>序號(hào):"+ xuhao +" | 姓名:"+xingming+" | 語(yǔ)文:"+yuwen+" | 數(shù)學(xué):"+shuxue;
rs.MoveNext();
}
}
//將查詢出來(lái)的內(nèi)容輸出成變量/值配對(duì)形式
Response.Write("&neirong_asp="+shuchuneirong);
//輸出總條數(shù)
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//輸出總頁(yè)數(shù)
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>

<%
//關(guān)閉記錄集對(duì)象
rs.Close();
//關(guān)閉連接對(duì)象
lianjie.Close();
%>

●說(shuō)明:上面的代碼有點(diǎn)長(zhǎng),大家不要害怕,其似都是前面一節(jié)講過(guò)的東西。
代碼一共有四段:第一段聲明使用JS腳本;第二段主要是一些初始化,最后一句比較重要,變量“xuanxiang”將決定下面調(diào)用那個(gè)函數(shù)以執(zhí)行對(duì)應(yīng)的功能。第三段是邏輯功能區(qū),根據(jù)變量“xuanxiang”決定調(diào)用那個(gè)函數(shù);第四段是定義的“顯示”函數(shù),用來(lái)顯示頁(yè)碼、記錄條數(shù)和記錄內(nèi)容的,而且最后還以“變量/值”配對(duì)的形式輸出它們,以便于返回FLASH。需要提示的是,這段代碼中最開始“每頁(yè)記錄數(shù)”和“當(dāng)前頁(yè)”是從FLASH傳遞過(guò)來(lái)的;最后一段代碼用來(lái)關(guān)閉記錄集對(duì)象和數(shù)據(jù)庫(kù)連接。在后臺(tái)代碼中,最重要的是,我們要明白哪些變量是要從FLASH傳遞過(guò)來(lái)的,哪些又是需要返回FLASH的。為了避免混淆,我一般把從FLASH傳遞給ASP的變量后加“_flash”,而從ASP返回FLASH的變量后則加“_asp”后綴。

2,后臺(tái)有了,回到FLASH中繼續(xù)我們的代碼吧,打開“zonghe.fla”,輸入以下代碼:

[Copy to clipboard]
CODE:
//================系統(tǒng)初始化=================
//——————界面初始化
//編碼
System.useCodepage = true;
//——————變量初始化
//聲明一個(gè)“選項(xiàng)”變量,ASP中將根據(jù)這個(gè)變量決定當(dāng)前演示的是那項(xiàng)功能
//初始化這個(gè)變量為“顯示”,用來(lái)顯示記錄
var xuanxiang = "顯示";
//當(dāng)前頁(yè)初始為第1頁(yè)
var dangqianye = 1;
//每頁(yè)記錄數(shù)初始為5條
var meiyejilu = 5;
//——————數(shù)組初始化
//——————對(duì)象初始化
//LV對(duì)象,從上到下依次用于“顯示”,“刪除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================邏輯功能區(qū)==================
//——————顯示功能測(cè)試
xianshi();
//================函數(shù)模塊區(qū)==================
//——————“顯示”功能
function xianshi() {
//LV對(duì)象獲取“選項(xiàng)”內(nèi)容
xianshi_lv.xuanxiang_flash = xuanxiang;
//獲取“當(dāng)前頁(yè)”
xianshi_lv.dangqianye_flash = dangqianye;
//獲取“每頁(yè)記錄數(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)前頁(yè)(直接從FLASH獲得)
dangqianye_txt.text = dangqianye;
//顯示每頁(yè)記錄數(shù)(直接從FLASH獲得)
meiyetiaoshu_txt.text = meiyejilu;
//顯示總條數(shù),總頁(yè)數(shù)和本頁(yè)的記錄內(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 = "加載失敗!";
}
};
}

●說(shuō)明:AS中的代碼不難理解,首先是“界面初始”,我定義了需要傳遞給ASP的三個(gè)變量“選項(xiàng)”,“當(dāng)前頁(yè)”,“總頁(yè)數(shù)”。另外我還聲明了四個(gè)用于各種功能演示的LV對(duì)象,以備下面需要。“邏輯功能區(qū)”的代碼非常簡(jiǎn)單,只有一句函數(shù)調(diào)用,這正是邏輯區(qū)的精髓,通過(guò)簡(jiǎn)潔的代碼清晰的反映功能邏輯。代碼最多的是“函數(shù)模塊區(qū)”,這里定義的是“顯示”函數(shù),注意它的數(shù)據(jù)流程,首先它將“選項(xiàng)”,“當(dāng)前頁(yè)”和“每頁(yè)記錄數(shù)”記錄在LV對(duì)象中,然后通過(guò)LV對(duì)象的sendAndLoad方法將這些信息發(fā)送給ASP,ASP接收到后,根據(jù)這些信息正確的輸出需要的內(nèi)容,這些內(nèi)容遵循“變量/值”配對(duì)規(guī)則,最后FLASH通過(guò)LV對(duì)象又接收到這些返回的內(nèi)容,并在接收成功后,在指定的動(dòng)態(tài)文本框中顯示它們。

我們可以在IIS下運(yùn)行一下“zonghe.html”看看效果,我們會(huì)看到正確頁(yè)碼信息,當(dāng)前頁(yè)顯示為1,“neirong_txt”文本框中顯示第一頁(yè)的內(nèi)容。有興趣的朋友可以自己在“zonghe.fla”中修改一下“dangqianye”和“meiyejilu”兩個(gè)變量,看看顯示結(jié)果有什么變化,思考一下導(dǎo)致這些變化的規(guī)律又是什么。

→今天就到這兒吧,建議大家多動(dòng)動(dòng)手,自己試驗(yàn)一下看能不能僅利用一個(gè)ASP文件,就把“刪除”,“更新”和“添加”功能都實(shí)現(xiàn)了。其實(shí)它們的原理跟“顯示”是相通的。等明天我寫完下一節(jié),大家再看看自己寫的代碼和我的有什么不同,也許會(huì)發(fā)現(xiàn)更多問(wèn)題:)大家跟我一起加油吧!

★L(fēng)V與ASP綜合運(yùn)用(二)

→接上節(jié),現(xiàn)在開始第三步:“刪除”功能:
在《ASP操作數(shù)據(jù)庫(kù)入門》一節(jié)的最后,我給出了刪除一條記錄的SQL語(yǔ)句,不知道大家當(dāng)時(shí)自己動(dòng)手試驗(yàn)了沒(méi)。如果沒(méi)的話也沒(méi)有關(guān)系,現(xiàn)在就跟我一起在FLASH中實(shí)現(xiàn)這個(gè)功能吧。而且我將演示如何利用“zonghe.asp”一個(gè)后臺(tái)文件實(shí)現(xiàn)所有功能。
→在看代碼之前,請(qǐng)大家先思考這樣一個(gè)問(wèn)題,如果要?jiǎng)h除一條記錄的話,你依據(jù)什么刪除呢?依據(jù)“yuwen”成績(jī)可以嗎?打開我們的數(shù)據(jù)庫(kù)表可以看到“毛寧”,“鞏麗”和“李小龍”都是100分,如果我們刪除語(yǔ)文成績(jī)?yōu)?00的記錄,就會(huì)同時(shí)把這三個(gè)人的記錄都刪除了。為了避免發(fā)生這種情況,我們一般都依據(jù)數(shù)據(jù)類型為“自動(dòng)編號(hào)”的字段,因?yàn)樽詣?dòng)編號(hào)字段是絕對(duì)不會(huì)重復(fù)的,比如這里的“xuhao”。
→按照我的開發(fā)習(xí)慣,我們還是先來(lái)寫后臺(tái),請(qǐng)?jiān)凇皕onghe.asp”寫如下代碼:

[Copy to clipboard]
CODE:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立數(shù)據(jù)庫(kù)鏈接對(duì)象
lianjie = Server.CreateObject("ADODB.Connection");
//打開數(shù)據(jù)庫(kù)
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)的值,來(lái)決定執(zhí)行對(duì)應(yīng)功能的代碼,這個(gè)變量來(lái)自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>
<%
//——————根據(jù)變量“xuanxiang”決定調(diào)用對(duì)應(yīng)的函數(shù)
if(xuanxiang=="顯示"){
//查詢顯示記錄演示
xianshi();
}else if(xuanxiang=="刪除"){
//刪除記錄演示
shanchu();
}
%>
<%
//——————定義“顯示”的功能函數(shù)
function xianshi(){
//查詢的SQL語(yǔ)句
sql="select * from shujubiao order by xuhao desc";
//執(zhí)行數(shù)據(jù)庫(kù)查詢
rs.Open(sql, lianjie, 3);
//從FLASH接收當(dāng)前頁(yè)碼
var dangqianye=Request("dangqianye_flash");
//從FLASH接收每頁(yè)顯示的記錄條數(shù)
var meiyejilu=Request("meiyejilu_flash");
//聲明一個(gè)變量用來(lái)存儲(chǔ)要輸出的內(nèi)容,初始為空
var shuchuneirong="";
//設(shè)置每頁(yè)顯示的記錄條數(shù)
rs.PageSize=meiyejilu;
//設(shè)置當(dāng)前顯示的頁(yè)碼
rs.AbsolutePage=dangqianye;
//獲取記錄總條數(shù)
var zongtiaoshu=rs.RecordCount;
//獲取總頁(yè)數(shù)
var zongyeshu=rs.PageCount;
//利用循環(huán)顯示一頁(yè)的所有內(nèi)容,具體的頁(yè)碼在第二段代碼的“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>序號(hào):"+ xuhao +" | 姓名:"+xingming+" | 語(yǔ)文:"+yuwen+" | 數(shù)學(xué):"+shuxue;
rs.MoveNext();
}
}
//將查詢出來(lái)的內(nèi)容輸出成變量/值配對(duì)形式
Response.Write("&neirong_asp="+shuchuneirong);
//輸出總條數(shù)
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//輸出總頁(yè)數(shù)
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>
<%
//——————定義“刪除”的功能函數(shù)
function shanchu(){
//接收從FLASH傳遞過(guò)來(lái)的序號(hào)ID
var id=Request("xuhao_flash");
//刪除的SQL語(yǔ)句
sql="delete from shujubiao where xuhao="+id;
//執(zhí)行數(shù)據(jù)庫(kù)查詢
rs.Open(sql, lianjie, 3);
}
%>

●說(shuō)明:對(duì)比上一節(jié)給出的ASP代碼,眼尖的朋友一定會(huì)發(fā)現(xiàn)有三處不同:
1,最后一段關(guān)閉連接的代碼沒(méi)了,為什么要?jiǎng)h除呢?這是為了在同一個(gè)ASP文件中多次利用一個(gè)連接對(duì)象和recordset對(duì)象。其實(shí)正規(guī)的寫法里,是不推薦這么做的,這里只是為了演示和講解方便,大家以后自己做留言本的時(shí)候,建議每個(gè)功能函數(shù)里都重新聲明連接對(duì)象和recordset對(duì)象,并在函數(shù)結(jié)尾關(guān)閉。
2,最后一段加了一個(gè)“shanchu”函數(shù),它接收從FLASH傳遞過(guò)來(lái)的記錄序號(hào),并執(zhí)行刪除語(yǔ)句。
3,在第三段的功能邏輯代碼區(qū),調(diào)用“shanchu”函數(shù)。
4,“xianshi”函數(shù)中的SQL語(yǔ)句最后加了一段:“order by xuhao desc”,這是讓記錄按xuhao字段倒序排列,這個(gè)是為以后“添加”功能服務(wù)的,它可以讓最新添加的記錄顯示在最上邊,便于我們觀察。這里我們可以先不用理會(huì)它。
→好的,后臺(tái)文件搞定了,現(xiàn)在回到FLASH中徹底完成我們的刪除功能吧:)
打開“zonghe.fla”,輸入下面的代碼:

[Copy to clipboard]
CODE:
//================系統(tǒng)初始化=================
//——————界面初始化
//編碼
System.useCodepage = true;
//——————變量初始化
//聲明一個(gè)“選項(xiàng)”變量,ASP中將根據(jù)這個(gè)變量決定當(dāng)前演示的是那項(xiàng)功能
//初始化這個(gè)變量為“顯示”,用來(lái)顯示記錄
var xuanxiang = "顯示";
//當(dāng)前頁(yè)初始為第1頁(yè)
var dangqianye = 1;
//每頁(yè)記錄數(shù)初始為5條
var meiyejilu = 5;
//——————數(shù)組初始化
//——————對(duì)象初始化
//LV對(duì)象,從上到下依次用于“顯示”,“刪除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================邏輯功能區(qū)==================
//——————顯示功能測(cè)試
xianshi();
//——————?jiǎng)h除功能測(cè)試
shanchu_btn.onRelease = function() {
shanchu();
};
//================函數(shù)模塊區(qū)==================
//——————“顯示”功能
function xianshi() {
//將選項(xiàng)設(shè)置為“顯示”
xuanxiang = "顯示";
//LV對(duì)象獲取“選項(xiàng)”內(nèi)容
xianshi_lv.xuanxiang_flash = xuanxiang;
//獲取“當(dāng)前頁(yè)”
xianshi_lv.dangqianye_flash = dangqianye;
//獲取“每頁(yè)記錄數(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)前頁(yè)(直接從FLASH獲得)
dangqianye_txt.text = dangqianye;
//顯示每頁(yè)記錄數(shù)(直接從FLASH獲得)
meiyetiaoshu_txt.text = meiyejilu;
//顯示總條數(shù),總頁(yè)數(shù)和本頁(yè)的記錄內(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對(duì)象
shanchu_lv.xuanxiang_flash = xuanxiang;
//獲得要?jiǎng)h除的記錄序號(hào)也記錄在LV對(duì)象中
shanchu_lv.xuhao_flash = shanchuxuhao_txt.text;
shanchu_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), shanchu_lv, "post");
shanchu_lv.onLoad = function() {
//根據(jù)ASP傳回來(lái)的“成功”進(jìn)行對(duì)應(yīng)操作
if (shanchu_lv.chenggong_asp == "成功") {
shanchuxuhao_txt.text = "刪除成功";
//最后調(diào)用“顯示”函數(shù),在“neirong_txt”文本框中刷新內(nèi)容顯示
xianshi();
} else {
shanchuxuhao_txt.text = "刪除失敗";
}
};
}

●說(shuō)明:上面FLASH中的代碼我們可以對(duì)比著ASP中的代碼來(lái)看,ASP中添加了刪除功能,F(xiàn)LASH中最后一段便對(duì)應(yīng)的添加了一個(gè)“shanchu”函數(shù),這個(gè)函數(shù)中的代碼,相信大家現(xiàn)在參照著注釋應(yīng)該能夠理解了吧。然后是“功能邏輯區(qū)”通過(guò)“刪除”按鈕調(diào)用刪除函數(shù)。最后還有一點(diǎn)小小的改動(dòng),我在這里就不考察大家的眼力了,大家注意看,我在“xianshi”函數(shù)中的第一行添加了一句:xuanxiang="顯示"。這是為了讓“xianshi”函數(shù)更加獨(dú)立,在“shanchu”函數(shù)中,當(dāng)刪除完成后,我調(diào)用了“xianshi”函數(shù),以便讓大家在FLASH中及時(shí)看到刪除后的結(jié)果,如果“xianshi”中沒(méi)有定義“xuanxiang”,則在“shanchu”函數(shù)中調(diào)用“xianshi”函數(shù)時(shí),“xuanxiang”的值依然為“shanchu”,這樣ASP中的“xianshi”函數(shù)就無(wú)法獲得正確的參數(shù),而顯示刪除后的內(nèi)容了。
→好的,說(shuō)了那么多,激動(dòng)人心的時(shí)刻到來(lái)了,讓我們?cè)贗IS下打開“zonghe.html”測(cè)試一下吧。剛打開你會(huì)看到正確的頁(yè)碼和內(nèi)容顯示,然后,你在刪除的輸入文本框中輸入“13”,按“刪除”按鈕,當(dāng)這個(gè)輸入文本框提示“刪除成功”后,你馬上會(huì)看到“記錄總數(shù)”由原來(lái)的13變成了12,內(nèi)容文本框中“xuhao”為13的記錄消失了。可憐的“趙微”就這樣被我們輕輕一點(diǎn)就淘汰出局了:)
經(jīng)過(guò)這次“刪除”功能的演示,相信大家已經(jīng)對(duì)我的思路和功能擴(kuò)展的方法有了一定的了解。下面我將一次性完成“添加”和“更新”功能演示!
→第四步,“添加”和“更新”功能:
這一步我就不再貼代碼了,大家直接下載源文件看吧,因?yàn)閷?shí)在沒(méi)什么好講的了,這一步需要做的就是按著上一步的模式,分別在ASP和FLASH添加對(duì)應(yīng)的函數(shù)塊兒,然后再在“邏輯功能區(qū)”調(diào)用對(duì)應(yīng)的功能函數(shù)就行了。都說(shuō)一個(gè)組織良好的程序一開始比較復(fù)雜,越往后寫反而越輕松,我想一篇好的教程也應(yīng)該一樣吧:)
★小總結(jié):這篇教程到這里核心內(nèi)容基本上講完了,一個(gè)FLASH留言本的基本功能也差不多都實(shí)現(xiàn)了,但想象和成品的距離其實(shí)是咫尺天涯,想做一個(gè)功能完善的FLASH留言本,遠(yuǎn)不止我講的這些內(nèi)容,這里面還有很多技巧和細(xì)節(jié),主要還是看你AS和ASP的基本功!反正捕魚的方法我是傾囊相授了,能不能捕到魚,還是要通過(guò)大家自己的實(shí)踐和努力。其實(shí)我留給大家的作業(yè)還是很多的,包括翻頁(yè)處理,管理登陸等等,但只要你真的領(lǐng)會(huì)我前面講的原理了,要自己做出來(lái)理論上確實(shí)不難。可如果你現(xiàn)在還是一點(diǎn)頭緒都沒(méi)有,恐怕很有必要把我的教程再?gòu)念^到尾重新看一遍了,用很長(zhǎng)時(shí)間只學(xué)會(huì)一個(gè)知識(shí)點(diǎn)不可怕,怕就怕你用很長(zhǎng)時(shí)間學(xué)了很多知識(shí)點(diǎn),卻沒(méi)一個(gè)真正學(xué)會(huì)!
最后如果有誰(shuí)通過(guò)自己的努力做出真正屬于自己的FLASH留言本了,別忘了貼上來(lái)讓火山和同志們一起欣賞欣賞,火山也算沒(méi)白忙活這么長(zhǎng)時(shí)間了:)
→下一節(jié)我再簡(jiǎn)單的談一下FLASH和ASP的其他通訊方式就徹底結(jié)束嘍!記得前幾樓有朋友要求加精,那時(shí)有點(diǎn)早,現(xiàn)在斑竹可以認(rèn)真看看這個(gè)教程能不能加精了,哈哈:)

★其它通訊方式原理淺談

→昨天在藍(lán)色理想偶然發(fā)現(xiàn)一個(gè)帖子,是藍(lán)色前斑竹“手工感情”寫的,其中總結(jié)了FLASH與ASP通訊的三種常見(jiàn)方法,包括loadVariables,LoadVars和XML,跟貼還有一些比較深入的討論,我覺(jué)得很好,大家對(duì)哪種方式有興趣的話不妨看一下前輩的帖子,火山這里就不再嘮叨了。只有一種方式他們沒(méi)提到,就是getURL,下面我就著重講一下這種通訊方式。
手工感情斑竹的教程:http://bbs.blueidea.com/viewthread.php?tid=1113968&highlight=

→getURL的特別之處在于它能打開一個(gè)新的ASP網(wǎng)頁(yè),并使這個(gè)網(wǎng)頁(yè)接收到傳遞的變量,這樣ASP網(wǎng)頁(yè)就能根據(jù)這個(gè)變量進(jìn)行各種設(shè)置和顯示了,我的FLASH BLOG中就利用了這個(gè)技術(shù)。遺憾的是,getURL無(wú)法指定傳遞變量的個(gè)數(shù),它會(huì)非常機(jī)械的把同一層級(jí)下的所有變量都傳遞給ASP,如果你把調(diào)用getURL函數(shù)的語(yǔ)句和大量其它AS語(yǔ)句都混在一起,勢(shì)必會(huì)傳遞大量垃圾變量,解決的方法是把要傳遞的變量和調(diào)用getURL函數(shù)的語(yǔ)句都寫在一個(gè)獨(dú)立的MC中。下面我簡(jiǎn)單演示一下它的用法:

1,先在同一目錄下建立一個(gè)“geturl.asp”文件和“geturl.fla”文件。
2,在“geturl.asp”中輸入下面的代碼:

[Copy to clipboard]
CODE:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//接收變量
var neirong1=Request("neirong1_flash");
var neirong2=Request("neirong2_flash");
var neirong3=Request("neirong3_flash");
//顯示變量?jī)?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”,并在貞上寫代碼:

[Copy to clipboard]
CODE:
var neirong1_flash = "neirong1";
var neirong2_flash = "neirong2";
anniu_btn.onRelease = function() {
getURL("geturl.asp", "_blank", "get");
};

→這樣前期工作就完成了,下面我們來(lái)進(jìn)行一系列對(duì)比性的測(cè)試:

①直接發(fā)布測(cè)試,當(dāng)我們點(diǎn)擊按鈕的時(shí)候,會(huì)發(fā)現(xiàn)新打開了“geturl.asp”,頁(yè)面顯示:

QUOTE:
內(nèi)容1的值是neirong1
內(nèi)容2的值是neirong2
內(nèi)容3的值是undefined

看來(lái)我們確實(shí)接收到變量neirong1_flash和neirong2_flash了,由于neirong3_flash我們?cè)贔LASH中沒(méi)有定義,所以ASP中得到undefined。現(xiàn)在我們注意觀察ASP網(wǎng)頁(yè)的URL后綴:

QUOTE:
?neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2

這個(gè)后綴經(jīng)過(guò)了URL編碼,翻譯過(guò)來(lái)其實(shí)是:

QUOTE:
?neirong1_flash=neirong1&neirong2_flash=neirong2

哈哈,它的格式大家是不是覺(jué)得非常熟悉呢?答對(duì)了!就是我們?cè)谇懊嬉恢睆?qiáng)調(diào)的“變量/值”配對(duì),它的變量傳遞原理與LV遵循的是同一規(guī)則!怎么樣?現(xiàn)在體會(huì)到什么是一通百通,觸類旁通了吧:)需要解釋的一點(diǎn)是,當(dāng)傳遞多個(gè)“變量/值”對(duì)的時(shí)候,他們之間用“&”分隔,與TXT中的數(shù)據(jù)格式又相同了。

②把“geturl.fla”中“getURL”函數(shù)中的“get”傳遞方式改為“post”再測(cè)試一下,你會(huì)發(fā)現(xiàn)ASP網(wǎng)頁(yè)在瀏覽器URL中的后綴沒(méi)有了,但網(wǎng)頁(yè)顯示結(jié)果不變。

③現(xiàn)在我們?cè)侔选癵eturl.fla”中“getURL”函數(shù)改成下面的形式:

[Copy to clipboard]
CODE:
getURL("geturl.asp?neirong3_flash=neirong3", "_blank", "get");

發(fā)布測(cè)試,我們會(huì)發(fā)現(xiàn)點(diǎn)擊按鈕后,打開的ASP網(wǎng)頁(yè)顯示內(nèi)容發(fā)生了變化,neirong3接收到了值,網(wǎng)頁(yè)顯示內(nèi)容如下:

QUOTE:
內(nèi)容1的值是neirong1
內(nèi)容2的值是neirong2
內(nèi)容3的值是neirong3

再觀察瀏覽器URL后綴:

QUOTE:
?neirong3_flash=neirong3&neirong1%5Fflash=neirong1&neirong2%5Fflash=neirong2

可以發(fā)現(xiàn)多了一個(gè)“neirong3_flash=neirong3&”,而且它沒(méi)進(jìn)行URL編碼,這點(diǎn)火山也不太理解,為什么把變量直接寫在ASP文件調(diào)用語(yǔ)句中就不進(jìn)行URL編碼了呢?希望有前輩高手點(diǎn)明,先替大家一起謝謝了。

這里需要重點(diǎn)提示的是:以前見(jiàn)有些人說(shuō)“getURL”函數(shù)可以通過(guò)在調(diào)用的文件名后加參數(shù)來(lái)傳遞指定的變量,這其實(shí)是視覺(jué)上的誤導(dǎo)。getURL永遠(yuǎn)都是傳遞所有的變量,只不過(guò)那些垃圾變量,如果你不測(cè)試的話,無(wú)法看到它們而已。

④最后再送大家一個(gè)大禮來(lái)給這篇教程畫上一個(gè)完美的句號(hào),這個(gè)禮物是“測(cè)試的思考方式”:

變量有三個(gè)
變量傳遞的寫法有兩種:直接寫在文件名后或者在時(shí)間軸聲明并賦值
變量傳遞的方式有兩種:get和post

所以測(cè)試的可能性一共就有:3*2*2=12種,我只做了4種代表性的,其它的留給讀者自己。

呵呵,怎么樣,這種思想很容易理解吧?

可惜道理大家都懂,實(shí)踐總是很難!


總結(jié)

以上是生活随笔為你收集整理的[转]FLASH与ASP通信入门教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。