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);
  }
}
        一套九阴九阳打完收工。大坑已变小坑,希望大家自己调试。

        【待续】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值