FLASH與ASP通信入門教程——做真正屬于自己的留言本第3/5頁
經(jīng)過前兩節(jié)的學(xué)習(xí),我們已經(jīng)熟悉了LV類的使用,以及ASP的基本格式和輸入輸出了?,F(xiàn)在我們就來看看這兩樣?xùn)|西是怎么融合到一起的。還記得我在講LV類的基本知識時所舉的TXT那個例子嗎?LV與TXT通訊時,TXT中的數(shù)據(jù)需要寫成“變量/值”配對的格式,其實必須寫成這種格式并不是由TXT決定的,它是由LV的特性決定的,也就是說,LV與文本文件通訊需要“變量/值”這種數(shù)據(jù)格式。ASP文件其實也是文本文件,ASP與LV進行通訊的時候,它所輸出的內(nèi)容格式也就必須遵循“變量/值”配對的規(guī)則。
好吧,讓我們從代碼中來一個直觀的體驗吧,我們還用“★L(fēng)V類基礎(chǔ)講解”那一節(jié)中舉的那個傳遞多個變量的例子,還記得那個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測試影片,我們發(fā)現(xiàn)輸出窗口輸出:“戰(zhàn)勝LoadVar類!/戰(zhàn)勝ASP!/我能做FLASH留言板了!”,跟修改之前一樣。
昏!這樣也可以?。窟@算什么?是FLASH與ASP的通訊嗎?怎么不需要IIS都行?那是FLASH與TXT通訊嗎?可人家的后綴名明明是“.asp”嘛!?其實這里火山也不是很明白,但我更偏向于把它理解成FLASH與ASP的通訊,只是因為這個ASP文件中沒有ASP語句,不需要IIS支持就能顯示內(nèi)容而已。如果你非要討個說法,最保守的回答是:FLASH與文本文件的通訊:)
呵呵:)好了,不忽悠大家了。上面那一段搞不清楚沒關(guān)系,其實我從TXT過渡到ASP的目的還是想更直觀的告訴大家:FLASH顯示ASP中的內(nèi)容跟TXT是一致的。只要我們想辦法把ASP輸出的數(shù)據(jù)格式搗鼓成“變量/值”配對就行了!
在TXT中又繞了這么長時間,大家著急了吧,好的,現(xiàn)在我要玩真的了,ASP正式登場:
首先我們把“l(fā)v_shiyan.asp”中的內(nèi)容改成如下形式:
★L(fēng)V與ASP通訊原理<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
Response.Write("&neirong1_txt=戰(zhàn)勝LoadVar類!&neirong2_txt=戰(zhàn)勝ASP!&neirong3_txt=我能做FLASH留言板了!&");
%>
我們先在IIS下運行一下,網(wǎng)頁中會顯示如下內(nèi)容:
★L(fēng)V與ASP通訊原理
&neirong1_txt=戰(zhàn)勝LoadVar類!&neirong2_txt=戰(zhàn)勝ASP!&neirong3_txt=我能做FLASH留言板了!&
恩???怎么那么眼熟啊,恭喜你,答對了,這不正是“l(fā)v_shiyan.txt”中的內(nèi)容嘛!只不過“★”后的標(biāo)題換成這節(jié)的標(biāo)題了:)好的,那么,聰明的你,現(xiàn)在是否已經(jīng)預(yù)料到我下一步想干什么呢?恭喜你,你又答對了,你怎么那么聰明呢,下一步當(dāng)然就是在FLASH中顯示這些數(shù)據(jù)拉。說干就干,回到“l(fā)v_shiyan.fla”的編輯環(huán)境中,再次按Ctrl+Enter測試影片。哈哈,成功了!輸出窗口顯示:“戰(zhàn)勝LoadVar類!/戰(zhàn)勝ASP!/我能做FLASH留言板了!”,哈哈哈哈——哎!說你呢,你笑什么?我高興是因為我終于又把你忽悠了,你笑什么呢?看看我們的“l(fā)v_shiyan.asp”文件,我們明明已經(jīng)寫了ASP語句了啊,可怎么還是不需要IIS支持就能直接在FLASH編輯環(huán)境中顯示呢?難道我們的FLASH軟件是在IIS下運行的嗎?這當(dāng)然不可能,那到底怎么會事啊?嘿嘿:)好了,不頭痛大家了,其實,在我們第一次把“l(fā)v_shiyan.txt”直接改成“l(fā)v_shiyan.asp”并運行影片測試的時候,“l(fā)v_shiyan.asp”中的數(shù)據(jù)已經(jīng)被讀入內(nèi)存,后來盡管我們又把“l(fā)v_shiyan.asp”中的內(nèi)容改成了ASP特有的輸出格式,但由于文件名字沒改變,運行影片測試的時候,F(xiàn)LASH還是會直接從內(nèi)存中提取已經(jīng)存儲過的內(nèi)容,而上次的內(nèi)容正好不需要IIS就能顯示,碰巧而已:)
那如何顯示新內(nèi)容呢?我們只需要利用隨機函數(shù)給ASP傳遞一個沒有實際意義的變量就可以了。我們可以把加載ASP的語句改成下面的樣子:
shiyan_lv.load("lv_shiyan.asp?bianliang="+random(9999));
現(xiàn)在再次在FLASH中測試影片,發(fā)現(xiàn)輸出窗口顯示以下提示:
加載失敗
Error opening URL "file:///E|/flashlianxi/flash與asp練習(xí)/FLASH與ASP通訊入門級教程/lv_shiyan.asp?bianliang=5624"
恩?。坑钟袉栴}了,不是說“bianliang”沒有實際意義嗎?怎么會導(dǎo)致“Error opening URL”呢?呵呵:)其實這里說的“沒有實際意義”是針對ASP來說的,更確切的說,是針對瀏覽器的,還記得我在“★ASP中基本的輸入輸出”一節(jié)中講的GET傳遞方式嗎?如果忘了一會兒可以回去復(fù)習(xí)下。其實我的建議是你先跟著我的進度把每節(jié)徹底弄明白,等我寫完后,再通讀一邊,然后你就完全可以自己動手做個留言板了。接上面的,既然這個“沒有實際意義”不是針對FLASH的,那FLASH肯定就不認(rèn)識了,它會把“l(fā)v_shiyan.asp?bianliang=5624”全部當(dāng)成文件名,所以當(dāng)然找不到這個文件了。
是該撥開云霧見晴天的時候了?,F(xiàn)在我們先在“l(fā)v_shiyan.fla”中添加一個動態(tài)文本域,并命名為“wenben_txt”,然后把輸出代碼改動一下,讓本來在輸出窗口顯示的內(nèi)容顯示在動態(tài)文本域里,具體改動是把下面第一行代碼換成第二行:
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下運行“l(fā)v_shiyan.html”,你會看到SWF的動態(tài)文本域里顯示“戰(zhàn)勝LoadVar類!/戰(zhàn)勝ASP!/我能做FLASH留言板了!”,現(xiàn)在你終于可以放心的歡呼了:我們終于可以把ASP輸出的內(nèi)容顯示在FLASH里了,哈哈……。
先喝口水吧,一眨眼快兩個小時了,我怎么寫的那么慢啊,加油加油!上面講的其實是ASP怎么向FLASH傳遞資料,這不是真正意義上的交互,交互是雙方互動的,現(xiàn)在我們就來看看FLASH怎么向ASP傳遞資料。在此之前請保證你還記得我在“★ASP中基本的輸入輸出”一節(jié)中講的ASP是怎么接收一個變量的,我們還用那一節(jié)所用的“asp_jichu.asp”文件,當(dāng)時我是通過GET方式直接在瀏覽器地址欄中對“neirong_wangzhi”進行賦值的,并且測試證明ASP確實通過Request接收到了這個變量的值?,F(xiàn)在我們就是要讓FLASH做地址欄做的事,我們要通過FLASH對“neirong_wangzhi”進行賦值。
在正式開始之前,我們還有以下工作要完成:
1,在“l(fā)v_shiyan.fla”中再添加一個按鈕,命名為“tijiao_btn”。
2,把“wenben_txt”這個動態(tài)文本域改成輸入文本域,取消HTML輸出,并更名為:“shuru_txt”。
3,再添加一個動態(tài)文本域,用來接收從ASP傳回的資料,命名為:“shuchu_txt”。
4,把“asp_jichu.asp”中的內(nèi)容改成下面的內(nèi)容:
★ASP中基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
//獲取從FLASH傳遞過來的變量
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)容:
System.useCodepage = true;
var shiyan_lv = new LoadVars();
tijiao_btn.onRelease = function() {
//獲得輸入的文本內(nèi)容,并把這個內(nèi)容記錄在變量“neirong_flash”中
//這里相當(dāng)于已經(jīng)對變量“neirong_flash”進行了賦值
shiyan_lv.neirong_flash = shuru_txt.text;
//將LV對象中儲存的所有變量都傳遞給ASP,不過這里我們只設(shè)定了一個,就是我們的“neirong_flash”
//向ASP傳遞成功后,我們再把從ASP傳遞回來的變量還儲存在“shiyan_lv”對象中
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ā)布測試一下吧,先有個直觀的認(rèn)識:在輸入文本框中輸入“我要做FLASH留言板”,然后點擊提交按鈕,你就會看到在動態(tài)文本框“shuchu_txt”中馬上就會顯示:“哈,你輸入的內(nèi)容已經(jīng)傳遞給ASP,并且又已經(jīng)從ASP返回到FLASH了,你輸入的內(nèi)容是:我要做FLASH留言板”。這個例子的源文件也可以直接在下面下載。
小提示:如果你在瀏覽器中直接點擊刷新不能正確顯示更新后的頁面和內(nèi)容,請按如下方式設(shè)置IE瀏覽器:→工具→Internet選項→設(shè)置→鉤選“每次訪問此頁時檢查”。這樣我們以后就可以直接利用刷新來測試,不用再擔(dān)心IIS刷新和內(nèi)存問題了。
最后我們來對測試過程中的數(shù)據(jù)流程做一個系統(tǒng)的分析:
- 用戶在FLASH的輸入文本框“shuru_txt”輸入“我要做FLASH留言板”
- 通過“shiyan_lv.neirong_flash = shuru_txt.text;”這句代碼把用戶輸入的內(nèi)容儲存在“shiyan_lv”對象的“neirong_flash”
- 通過“shiyan_lv”對象的“sendAndLoad”方法將它記錄的變量都傳遞給指定的ASP文件
- 在ASP文件中通過“neirong=Request("neirong_flash");”這句代碼獲得從FLASH的“shiyan_lv”對象傳遞過來的變量“neirong_flash”
- ASP接收變量內(nèi)容后調(diào)用Response對象的Write方法利用傳遞過來的變量內(nèi)容以“變量/值”配對的格式輸出需要返回FLASH的新內(nèi)容
- FLASH在調(diào)用“shiyan_lv”對象的“sendAndLoad”方法發(fā)送變量時就已經(jīng)指定“shiyan_lv”本身接收返回的內(nèi)容
- “shiyan_lv”接收到新返回的內(nèi)容,并根據(jù)其“變量/值”配對的格式,將新內(nèi)容儲存在“shiyan_lv.fanhui_asp”中
- 當(dāng)新返回的內(nèi)容在FLASH中加載完成后,調(diào)用“shiyan_lv”對象的onLoad事件
- 通過“shuchu_txt.text = shiyan_lv.fanhui_asp;”這句代碼在輸出文本框中顯示新返回的內(nèi)容
經(jīng)過這個分析,相信大家應(yīng)該可以從總體上有一個理性的認(rèn)識了吧。
最后還需要重點強調(diào)的幾點是:
- LV對象在調(diào)用“sendAndLoad”方法發(fā)送變量的時候,會把LV對象中儲存的所有變量都發(fā)送給ASP。
- ASP在接收LV對象傳遞過來的變量時,只需要在Request中使用與FLASH中相同的變量名字就可以了。
- ASP輸出的資料一定要使用“變量/值”配對的格式,因為只有輸出成這種格式,F(xiàn)LASH才能像處理TXT一樣將ASP輸出的資料分別記錄在幾個變量并保存在指定接收資料的LV對象中。
- 如果我們想向FLASH傳遞兩個或者更多變量,我們可以在FLASH中這樣寫:(以傳遞三個變量為例)
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"); - 傳遞大量資料時,必須使用POST方法。
- 如果我們想在FLASH中接收到多個從FLASH傳遞過來的變量,就按TXT的處理方式來就OK了。
呼呼,喘口氣,這一節(jié)終于寫完了。本來計劃下次直接寫“LV與ASP綜合運用”的,但現(xiàn)在想想,還是很有必要加上一節(jié)“ASP操作數(shù)據(jù)庫入門”,請繼續(xù)關(guān)注。有什么好的意見也可以提一下,希望通過大家的共同努力讓這篇教程能讓菜鳥以最快的速度,最少的障礙自己制作出真正屬于自己的FLASH留言板。
還記得我們向ASP傳遞的那個無意義的變量“bianliang”嗎?既然我們向ASP傳遞了,那ASP就應(yīng)該能接收的到,有興趣的朋友可以在“asp_jichu.asp”中加一個接收變量的語句,測試一下效果。改動后的ASP代碼如下:
★ASP中基本的輸入輸出<br>
<%@LANGUAGE="JAVASCRIPT"%>
<%
var neirong;
var canshu;
//獲取網(wǎng)址中變量的內(nèi)容
neirong=Request("neirong_flash");
//獲取無意義的參數(shù)
canshu=Request("bianliang");
//顯示變量內(nèi)容
Response.Write("&fanhui_asp=哈,你輸入的內(nèi)容已經(jīng)傳遞給ASP,并且又已經(jīng)從ASP返回到FLASH了,你輸入的內(nèi)容是:"+neirong+"。你傳遞的無意義的參數(shù)是:"+canshu);
%>
測試后發(fā)現(xiàn)真的可以接收到一個數(shù)字呢,而且每次點提交這個數(shù)字幾乎都不一樣,在0-9999之間變化??磥砦覀兇_實接收到FLASH傳遞過來的隨機變量了,可傳遞的時候,地址欄里怎么沒顯示呢?是因為這次我們采用了“POST”傳遞方式,這種方式用來傳遞大量資料,是不會在地址欄中顯示變量和它的值的。
FLASH與ASP交互實例:demo01.rar
相關(guān)文章
在Flash 設(shè)為首頁 加為收藏實現(xiàn)代碼
一直都是用js實現(xiàn)設(shè)為首頁和加為收藏頁面實現(xiàn) 在Flash中實現(xiàn)“設(shè)為首頁”和“加為收藏”功能是使用Get URL結(jié)合JavaScript來實現(xiàn)的。2009-03-03圖文演示Flash+ASP實現(xiàn)用戶登錄/注冊程序
圖文演示Flash+ASP實現(xiàn)用戶登錄/注冊程序...2007-12-12AS3.0 實例學(xué)習(xí) 熟悉tween以及tweenEvent的運用
AS3.0 實例學(xué)習(xí) 熟悉tween以及tweenEvent的運用...2007-12-12高手寫的Tracer-Flash代碼調(diào)試類代碼下載
高手寫的Tracer-Flash代碼調(diào)試類代碼下載...2007-12-12AS3.0實例學(xué)習(xí) 熟悉新的事件機制和addChild的運用
AS3.0實例學(xué)習(xí) 熟悉新的事件機制和addChild的運用...2007-12-12