flash與asp/php/asp.net通信的方法
更新時(shí)間:2008年03月30日 13:13:02 作者:
flash與后臺(tái)程序通信
三、使用xml
Flash中的XML對(duì)象也有方法可以將XML數(shù)據(jù)向服務(wù)器發(fā)送。即send和sendAndLoad。send方法向某個(gè) URL 傳遞 XML 對(duì)象,返回的信息都被發(fā)送到另外一個(gè)瀏覽器窗口;sendAndLoad 方法向某個(gè) URL 發(fā)送一個(gè) XML 對(duì)象。返回的信息都放在一個(gè)XML對(duì)象中。
在某種程度上, XML的send方法和sendAndLoad方法類似于loadVars對(duì)象的send方法和sendAndLoad方法。
以login系統(tǒng)為例。首先將Flash中需要傳送的信息(用戶名和密碼)轉(zhuǎn)換成一個(gè) XML 對(duì)象,然后將數(shù)據(jù)作為 XML 文檔發(fā)送到服務(wù)器端腳本。在服務(wù)器端我們還是從數(shù)據(jù)庫中提取相應(yīng)的數(shù)據(jù),在服務(wù)器端腳本中對(duì)這兩種信息驗(yàn)證。最后將驗(yàn)證成功的信息也以XML格式傳送回Flash。圖1顯示了這種結(jié)構(gòu):

首先,看看數(shù)據(jù)庫的結(jié)構(gòu),很簡(jiǎn)單,用Access做一個(gè)名為login.mdb(存儲(chǔ)到同swf,asp文件同同一目錄下)的數(shù)據(jù)庫文件,然后新建一個(gè)名為admin的表,第一個(gè)字段名稱是”id”,數(shù)據(jù)類型是自動(dòng)編號(hào);第二個(gè)字段名稱是username,數(shù)據(jù)類型是文本。字段大小改為16;第三個(gè)字段名稱為password,數(shù)據(jù)類型是文本,字段大小也改為16。表結(jié)構(gòu)如圖2所示:

接著,我們用Flash做一個(gè)登錄界面。為了使得這個(gè)界面在其他地方也能用到,可以將所有的元件都集中到一個(gè)名為login的MC里面。這個(gè)MC的基本結(jié)構(gòu)如下:
bg層:用來放置登錄界面的背景。第二幀加關(guān)鍵幀;
Title層:用來放置標(biāo)題MC,MC名字為title,因?yàn)橹皇且粋€(gè)標(biāo)題,就不列出這個(gè)MC的結(jié)構(gòu)了。第二幀加關(guān)鍵幀;
Inputbg層:input文本的背景。
InputTXT層:兩個(gè)input文本,第一個(gè)的var為name,第二個(gè)的var為pass,類型為Password,我們要向服務(wù)器發(fā)送的變量就從這里獲得;
Pushbt層:一個(gè)確定按鈕(名字為pushbt),用來發(fā)送一個(gè)XML變量,其action如下:
Action for pushbt:
復(fù)制代碼 代碼如下:
on (release, keyPress "<Enter>") {
//新建一個(gè)xml對(duì)象,節(jié)點(diǎn)明為L(zhǎng)OGIN。在屬性
//中存放用戶名和密碼
loginXML = new XML();
loginElement = loginXML.createElement("LOGIN");
loginElement.attributes.name = this.name;
loginElement.attributes.pass = this.pass;
loginXML.appendChild(loginElement);
//新建一個(gè)xml對(duì)象,用來存放從服務(wù)器返回的信息
loginReplyXML = new XML();
loginXML.sendAndLoad("http://localhost/chklogin.asp", loginReplyXML);
Msg = "正在等待服務(wù)器驗(yàn)證";
gotoAndStop(2);
}
這一層有兩幀,第一幀的action為stop();第二幀上的action為
Action for frame2
復(fù)制代碼 代碼如下:
stop();
function onLoginReply() {
//提取從服務(wù)器返回的數(shù)據(jù)并判斷信息是否正確
var reply = this.firstChild;
if (reply.nodeName == "LOGINREPLY" && reply.attributes.login == "1") {
Msg = reply.attributes.msg;
}
}
//返回服務(wù)器信息
loginReplyXML.onLoad = onLoginReply;
這個(gè)MC最后將如圖3所示:

↑ login MC的第一幀

↑ login MC的第二幀
這樣,如果你輸入的name為admin,pass為admin的話,按下確定按鈕,服務(wù)器的chklogin.asp頁面就會(huì)接受到以下XML:
<LOGIN pass ="admin" name ="admin" />
在服務(wù)器響應(yīng)并驗(yàn)證了信息之后,需要發(fā)送回來以下形式的XML:
<LOGINREPLY login=”1” Msg=someMessage />
最后看看asp怎么寫。
chklogin.asp:
復(fù)制代碼 代碼如下:
<%@ Language="JScript"%>
<%
//創(chuàng)建一個(gè)新的DomDocument對(duì)象,存入客戶端傳送過來的XML請(qǐng)求
var xmlReceive = new ActiveXObject("Msxml2.DomDocument");
xmlReceive.loadXML(Request.Form());
var reElement = xmlReceive.documentElement;
//提取用戶名和密碼信息
password = reElement.attributes[0].nodeValue;
username = reElement.attributes[1].nodeValue;
//創(chuàng)建并打開一個(gè)新連接。
var conn = new ActiveXObject("ADODB.CONNECTION");
strconn = "DBQ="+Server.MapPath("login.mdb")+";DefaultDir=;Driver={Microsoft Access Driver (*.mdb)};";
conn.Open(strconn);
//新建并打開一個(gè)查詢
var rs = new ActiveXObject("ADODB.RECORDSET");
sql = "select * from admin where id=1";
rs.open(sql,conn,1,1);
//開始驗(yàn)證
if (!(rs.BOF && rs.EOF)){
if (password == rs("password") && username == rs("username")){
Msg = "恭喜你," + username + "你已經(jīng)成功登陸!";
}else if(username != rs("username")){
Msg = "對(duì)不起,您填寫的用戶名不正確,請(qǐng)返回重新填寫";
}else if(password != rs("password")){
Msg = "對(duì)不起,您填寫的密碼不正確,請(qǐng)返回重新填寫";
}
}else{
Msg = "登陸沒有成功,看上去服務(wù)器出了點(diǎn)問題。"
}
//創(chuàng)建一個(gè)新的DomDocument對(duì)象,向客戶端發(fā)送
var xmlRepley = new ActiveXObject("Msxml2.DomDocument");
xmlRepley.loadXML("<LOGINREPLY login='1' msg='"+Msg+"' />");
Response.Write(xmlRepley.xml);
%>
我們知道,F(xiàn)lash中xml.sendAndLoad方法是以HTTP的POST方法發(fā)送到服務(wù)器頁面的,因此這個(gè)XML數(shù)據(jù)存在于Request對(duì)象中。在DOM中可以直接象在第5行中使用的方法那樣以loadXML的方法加載。
雖然可以使用DOM的其他方法來創(chuàng)建xmlRepley 這個(gè)XML文檔(例如createNode),但是那樣對(duì)初學(xué)者來說是很難控制的。因此簡(jiǎn)單的以字串的形式加載到xmlRepley中更為直觀。如果你有了一定的經(jīng)驗(yàn)后,需要利用ADO從數(shù)據(jù)庫中提取數(shù)據(jù)并封裝為XML文檔,那么就會(huì)發(fā)現(xiàn)使用createNode方法會(huì)有效率一些。
您可能感興趣的文章:
- PHP+FLASH實(shí)現(xiàn)上傳文件進(jìn)度條相關(guān)文件 下載
- 使用PHP提取視頻網(wǎng)站頁面中的FLASH地址的代碼
- PHP生成Flash動(dòng)畫的實(shí)現(xiàn)代碼
- flash+php+mysql打造簡(jiǎn)單留言本教程
- flash用php連接數(shù)據(jù)庫的代碼
- 用PHP動(dòng)態(tài)創(chuàng)建Flash動(dòng)畫
- php讀取flash文件高寬幀數(shù)背景顏色的方法
- php中使用getimagesize獲取圖片、flash等文件的尺寸信息實(shí)例
- PHP實(shí)現(xiàn)仿百度文庫,豆丁在線文檔效果(word,excel,ppt轉(zhuǎn)flash)
- php獲取flash尺寸詳細(xì)數(shù)據(jù)的方法