加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flex实例【Shangle.net】解析【填坑篇】

发布时间:2020-12-15 03:45:07 所属栏目:百科 来源:网络整理
导读:??????? 在”解析六“中我们提到了利用URLRequest和URLLoader来读XML文件,并加载内容,然后有提到布置学生思考题的问题,这个坑貌似有点深,所以需要来帮忙填下。思考题内容就一个,如何利用FLEX来将评论内容写入到XML文件中,那样就可以保留数据了。 ?????

??????? 在”解析六“中我们提到了利用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);
  }
}
??????? 一套九阴九阳打完收工。大坑已变小坑,希望大家自己调试。

??????? 【待续】

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读