先来看看论坛的功能,有登陆,查看主题,查看正文,发表新主题,回复主题,删除,权限管理等等基本功能,根据需要在此基础上稍作修改,就可以实现一个功能比较完备的论坛了。下面就按顺序一个一个来实现论坛的功能,每一个介绍的内容都分为“传递的XML”、“Flash端”、“Asp端”三部分。
一、登陆
登陆就是将用户名和密码用XML格式发送到服务器端,服务器端将验证的结果用XML格式返回。
A、传递的XML
所谓传送的XML,就是在服务器端跟Flash端之间传送的XML字符串,也就是一般意义上的通讯报文了。
1、请求报文
2、响应报文
B、Flash端
1、在Flash MX 2004中新建一个Flash文件,在场景的第一帧的ActionScript面板上增加语句:
stop();
2、在第一帧的场景中用文本工具拉两个文本框,类型都为“Input type”,变量名var分别设置为“username”、“pwd”,这是用来输入用户名跟密码的。
3、新建一个Button并拖到第一帧的场景中,摆放位置如图1所示。并在这个Button的ActionScript面板中增加如下语句:
| on(release){ loginXml = new XML(); // 注释1 loginElement = loginXml.createElement("LOGIN"); // 注释2 // name node nameElement = loginXml.createElement("USERNAME"); // 注释3 nameNode = loginXml.createTextNode("name"); // 注释4 nameNode.nodeValue = _root.username; // 注释5 nameElement.appendChild(nameNode); // 注释6 // pwd node pwdElement = loginXml.createElement("PWD"); // 注释7 pwdNode = loginXml.createTextNode("pwd"); pwdNode.nodeValue = _root.pwd; pwdElement.appendChild(pwdNode); loginElement.appendChild(nameElement); // 注释8 loginElement.appendChild(pwdElement); // 注释9 loginXml.appendChild(loginElement); // 注释10 xmlRepley = new XML(); // 注释11 xmlRepley.onLoad = onLoginReply; // 注释12 function onLoginReply (success) { if (success) { // 注释13 if (xmlRepley.firstChild.firstChild.attributes.right == "1") { // 注释14 _root.gotoAndPlay("main") }else { _root.username = "登陆失败"; } } } loginXml.sendAndLoad("http://localhost/xmlbbs/login.asp", xmlRepley); // 注释15 } |
注释1:新建一个XML对象,这是用来发送到服务器端的。
注释2:创建一个LOGIN结点对象。
注释3:创建一个USERNAME结点对象,注意不能直接在Element对象中放置文本内容,要在Text Node对象中才能放置文本内容。具体可以参见Flash帮助文件中有关XML.createElement()和XML.createTextNode() 中的内容。
注释4:创建一个Text Node对象,用来放置USERNAME结点的文本内容。
注释5:对Text Node结点赋值。
注释6:将创建的Text Node结点插入到USERNAME结点对象中。
注释7:分别创建一个PWD结点对象和Text Node,并将Text Node结点插入到PWD结点对象中。
注释8:将USERNAME结点对象插入到LOGIN结点对象中。
注释9:将PWD结点对象插入到LOGIN结点对象中。
注释10:将LOGIN结点对象插入到所创建的XML对象中,从而构造一个完整的XML对象。注意这里在构建XML对象时,是从最里面开始构建的。
注释11:新建一个XML对象,这里是用来放置接收到的XML对象的。
注释12:设置接收XML对象的响应函数,当服务器端返回XML对象的时候触发。
注释13:success是标示XML对象是否从服务器返回的标示位。
注释14:判断返回的XML对象中的结点属性是否符合要求。
注释15:利用sendAndLoad()函数,将Flash端的XML对象发送到服务器端,并接收从服务器端返回的XML对象。
C、Asp端
新建一个Asp文件,命名为login.asp,输入如下的内容:
|
<% set objDom = server.CreateObject("microsoft.xmldom") ‘注释4 set objpwd = objdom.documentElement.SelectSingleNode("//LOGIN/PWD") ‘注释8 '判断 '返回 |
注释1:利用FileSystemObject组件建立一个文件对象,将通讯过程中传送的东西写在文件里面,方便调试。
注释2:根据实际需要修改文件的路径。
注释3:把Request.Form是传送进来的所有内容都写在文件里面,在服务器端留下痕迹。
注释4:创建一个XML对象。可以在MS XML包中找到更多有关XML操作的信息。
注释5:通过loadxml()函数,导入Flash端传送进来的XML格式字符串。
注释6:建立USERNAME结点的对象。
注释7:取得USERNAME结点的内容。
注释8:建立PWD结点的对象,取得PWD结点的内容。
注释9:建立一个数据库的ADO连接,这里用到的是Access 2000数据库,数据库的格式见后面的附录,请注意数据库的存放位置。
注释10:建立一个数据库Recordset集合。
注释11:根据取得的用户名和密码,构造一个SQL字符串。
注释12:根据构造的SQL字符串去查询数据库。
注释13:判断用户名及密码是否正确。
注释14:用户名及密码正确,取得数据库中相应的权限。
注释15:直接构造一个XML字符串,并通过write函数写到Flash端。
二、查看主题
查看主题就是Flash端向服务器端发送请求,服务器端将数据库中所保存的文章主题用XML格式发送到Flash端。
A、传递的XML
1、请求报文
| <TITLE>< /TITLE > |
2、响应报文
| <TITLE title1=”标题1” id1=”编号1” title2=”标题2” id2=”编号2” title3=”标题3” id3=”编号3” title4=”标题4” id4=”编号4” title5=”标题5” id5=”编号5” title6=”标题6” id6=”编号6” title7=”标题7” id7=”编号7” title8=”标题8” id8=”编号8” title9=”标题9” id9=”编号9” title10=”标题10” id10=”编号10”>< /TITLE > |
B、Flash端
1、在场景的第二帧上“插入关键帧”,将此帧命名为“main”,并在此帧的Action Script面板上增加如下语句:
| fileNowId = "0"; fileId1 = "0"; fileId2 = "0"; fileId3 = "0"; fileId4 = "0"; fileId5 = "0"; fileId6 = "0"; fileId7 = "0"; fileId8 = "0"; fileId9 = "0"; fileId10 = "0"; stop(); |
注释:上面这些变量都是为了保存从服务器端返回的Id号而设置的。
2、在第二帧的场景中用文本框工具拉十个文本框,类型都设置为“Input Type”,变量var分别设置为“title1”、“title2”、“title3”、“title4”、“title5”、“title6”、“title7”、“title8”、“title9”、“title10”。
3、在第二帧的场景中增加一个显示为“更新”Button,用来更新主题,在此Button的Action Script面板上增加如下语句:
|
on(release){ |
注释1:创建一个用来发送的XML对象。
注释2:创建TITLE结点对象。
注释3:将TITLE结点对象添加到XML对象中。
注释4:创建一个响应的XML对象。
注释5:设置响应XML对象的onLoad函数。
注释6:titlesuccess标示是否从服务器端返回来的XML对象。
注释7:将返回的标题属性显示在场景的文本框中。
注释8:将返回的Id号保存在场景的变量中。
注释9:利用sendAndLoad()函数,将Flash端的XML对象发送到服务器端,并接收从服务器端返回的XML对象。
C、Asp端
新建一个Asp文件,命名为title.asp,输入如下的内容:
<%
Set MyFileObject = Server.CreateObject("Scripting.FileSystemObject") ‘ 注释1
Set MyTextFile = MyFileObject.CreateTextFile("G:\写作\flashxmlbbs\login.xml", 8, TRUE)
MyTextFile.WriteLine(Request.Form) ‘ 注释2
set objDom = server.CreateObject("microsoft.xmldom") ‘ 注释3
objDom.loadxml(Request.Form) ‘ 注释4
set objname = objdom.documentElement.SelectSingleNode("//TITLE") ‘ 注释5
'判断
set conn=Server.CreateObject("ADODB.Connection")
conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("/xmlbbs/xmlbbs.mdb") ‘ 注释6
set rs=Server.CreateObject("ADODB.Recordset")
strSql="select * from fileinfo "
rs.open strSql,conn, 1, 1 ‘ 注释7
tempNum = 1
strResult = ""
do until tempNum = 11 ‘ 注释8
if rs.eof then ‘ 注释9
exit do
end if
strResult = strResult & " title" & tempNum & "=""" & rs("title") & """" & " id" & tempNum & "=""" & rs("ID") & """" ‘ 注释10
tempNum = tempNum + 1
rs.movenext ‘ 注释11
loop
rs.close
conn.close
'返回
response.write("<TITLE " & strResult & "></TITLE>") ‘ 注释12
%>
注释1:创建一个文件对象。
注释2:将从Flash端传送来的XML字符串写在临时文件中。
注释3:创建一个XML对象。
注释4:将Flash端传送来的XML字符串导入到XML对象中。
注释5:创建TITLE结点对象。
注释6:创建一个数据库的ADO连接,打开数据库。
注释7:构造一个SQL字符串,在数据库中查询符合条件的记录。 注释8:循环读取Recordset记录集中的记录。
注释9:如果到了记录集的末尾,退出循环。
注释10:将从记录集中读出来的记录按格式拼凑成一个字符串。
注释11:将Recordset记录集中的指针下移一步。
注释12:将在循环中构造的字符串发送到Flash端。

浙公网安备 33010602011771号