Flex实例【Shangle.net】解析【填坑篇】
??????? 在”解析六“中我们提到了利用URLRequest和URLLoader来读XML文件,并加载内容,然后有提到布置学生思考题的问题,这个坑貌似有点深,所以需要来帮忙填下。思考题内容就一个,如何利用FLEX来将评论内容写入到XML文件中,那样就可以保留数据了。 ??????? 这里有个前提,我们做的FLEX应用都是WEB应用而不是桌面应用,所以想直接写文件肯定是行不通的了。这里就涉及到服务器端的应用了。教的学生其实是有基础的,他们的前导课程中开过JSP,所以应该说只要有了思路,实现基本上没难度的,只是稍微有点记忆压力,要回想起当初的课程内容。学霸应该表示压力==0。 ??????? 因为我是教asp.net的,当然ASP也挺熟悉,所以我们就以简单的ASP来作为服务器端技术来实现XML文件的写入操作。JSP表示不熟,我想同学们是能分分钟搞定的。 ??????? 原理很简单: ??????? 1、获取评论输入界面所输入的所有信息,这个在前面的”解析五“中 已经详细介绍; ??????? 2、将这些信息POST或者GET传输到服务器端页面(应该可以用前面提到的URLLoader或者HTTPSERVICE或者WEBSERVICE来实现,这里用最明了的方式,就是URLLoader的方式) ??????? 3、在服务器端进行写操作 ??????? 4、回传状态码,或者回传数据内容(我这里只是回传状态码,根据状态码在FLEX里更新评论列表,而不是回传评论内容从而更新评论列表) ??????? 一步一步来实现。 ??????? 第一步:代码如下,和”解析五“中一样: var theNickName:String=cmtDialog.nickName.text; var theContent:String=cmtDialog.content.text; var theReNickName:String=cmtDialog.reNickName; var theReFloor:int=cmtDialog.reFloor; var theCommentID:int=commentXML.children().length()+1; var theFloor:int=theCommentID; //这里不考虑中间评论被删除后ID会有空缺的情况 var theDate:Date=new Date(); var theAddTime:String=theDate.fullYear+"年"+(theDate.month+1)+"月"+theDate.date+"日 "+theDate.hours+":"+theDate.minutes; //以下代码是为FLEX中更新数据准备的,在下面的第四步中有用到 var commentItemStr:String="<commentItem><commentID>"+theCommentID+"</commentID>"; ?? ??? ??? ??? ?commentItemStr+="<diaryID>1</diaryID>"; ?? ??? ??? ??? ?commentItemStr+="<floor>"+theFloor+"</floor>"; ?? ??? ??? ??? ?commentItemStr+="<nickName>"+theNickName+"</nickName>"; ?? ??? ??? ??? ?commentItemStr+="<reFloor>"+theReFloor+"</reFloor>"; ?? ??? ??? ??? ?commentItemStr+="<reNickName>"+theReNickName+"</reNickName>"; ?? ??? ??? ??? ?commentItemStr+="<content>"+theContent+"</content>"; ?? ??? ??? ??? ?commentItemStr+="<addTime>"+theAddTime+"</addTime></commentItem>"; ?? ??? ??? ??? ?commentItemXML=new XML(commentItemStr);??????? 第二步:传输数据到服务器端,代码如下: aspRequest=new URLRequest("../writeComment.asp");//请求的服务器页面,也就是发送数据到哪里 aspLoader=new URLLoader(aspRequest); //开始加载 aspRequest.method=URLRequestMethod.POST; //设定传输方式POST/GET,这里用了POST var values:URLVariables=new URLVariables(); //设定传输的变量对象URLVariables类型 //以下分别设定传输变量名及对应的变量值 values.commentID=theCommentID; values.diaryID=1; values.floor=theFloor; values.nickName=theNickName; values.reFloor=theReFloor; values.reNickName=theReNickName; values.content=theContent; values.addTime=theAddTime; //变量设定结束 ? aspRequest.data=values; //设定传输的数据为上面设定好的URLVariables对象 aspLoader.dataFormat=URLLoaderDataFormat.VARIABLES; //上面那句设定传输的数据格式为BINARY/TEXT/VARIABLES,这里设定为VARIABLES,即name1=value1&name2=value2...这种 aspLoader.load(aspRequest); //加载传输 aspLoader.addEventListener(Event.COMPLETE,msgSendCompliteHandler); //添加事件监听,监听是否有服务器端反馈??????? 第三步:服务器端ASP代码: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% set xml = Server.CreateObject("MSXML2.domdocument") xml.load Server.MapPath("shangle.net-debug/data/commentList.xml") set nodeRoot = xml.documentElement set nodeCommentItem = xml.createElement("commentItem") nodeRoot.appendChild nodeCommentItem set nodeCommentID = xml.createElement("commentID") nodeCommentID.text=Request.Form("commentID") nodeCommentItem.appendChild nodeCommentID set nodeDiaryID = xml.createElement("diaryID") nodeDiaryID.text = Request.Form("diaryID") nodeCommentItem.appendChild nodeDiaryID set nodeFloor = xml.createElement("floor") nodeFloor.text = Request.Form("floor") nodeCommentItem.appendChild nodeFloor set nodeNickName=xml.createElement("nickName") nodeNickName.text = Request.Form("nickName") nodeCommentItem.appendChild nodeNickName set nodeReFloor = xml.createElement("reFloor") nodeReFloor.text=Request.Form("reFloor") nodeCommentItem.appendChild nodeReFloor set nodeReNickName= xml.createElement("reNickName") nodeReNickName.text=Request.Form("reNickName") nodeCommentItem.appendChild nodeReNickName set nodeContent = xml.createElement("content") nodeContent.text=Request.Form("content") nodeCommentItem.appendChild nodeContent set nodeAddTime = xml.createElement("addTime") nodeAddTime.text=Request.Form("addTime") nodeCommentItem.appendChild nodeAddTime xml.save Server.MapPath("shangle.net-debug/data/commentList.xml") set nodeCommentItem = nothing set nodeRoot=nothing set nodeCommentID = nothing set nodeDiaryID = nothing set nodeFloor = nothing set nodeNickName = nothing set nodeReFloor = nothing set nodeReNickName = nothing set nodeContent = nothing set nodeAddTime = nothing response.write "flag=1" '这里要注意的是就回传了flag=1,而没有判断错误状态下的回传内容,自己扩展 response.end() %>??????? 上面的代码分隔比较有规则,所以就不另作解释了,主要提下第一行是一个全局设定,ASP脚本代码为VBScript,编码65001表示UTF-8 ??????? 第四步:根据ASP代码中那句response.write ”flag=1“,来获取回传过来的”flag=1“,然后判断flag的值是否为1,如果为1就表示加载成功,就可以更新评论列表了。代码主要写在第三步中添加的事件监听的对应函数中: private function msgSendCompliteHandler(event:Event):void{ if(aspLoader.data.flag=="1") { commentXML.appendChild(commentItemXML); //这里的commentItemXML变量在第一步中有设定 dataSource=new XMLListCollection(new XMLList(commentXML.commentItem));//将这个变量作为子节点添加到原XML内容中去 commentList.dataProvider=dataSource.list;//重新绑定数据 } else { Alert.show(aspLoader.data); } }??????? 一套九阴九阳打完收工。大坑已变小坑,希望大家自己调试。 ??????? 【待续】 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |