ASP与Flash8联合打造简单新闻评论系统
以上文字是Ajax的提出者Jesse James Garrett在“internet+互联网世纪论坛”上接受新浪网专访时所讲的话。你看了这段文字有什么想法呢,是不是觉得FLASH与Ajax存在些共同点。前两天写了一篇名叫《asp+ajax打造无刷新新闻评论系统》的文章,文章中通过一个实例的讲解大致的阐述了关于Ajax的使用,今天,我想利用同样的服务器端代码,再看看在FLASH中将如何的实现。
FLASH软件版本:flash 8
操作系统:中文 Windows 操作系统
一、Flash知识点
1、 useCodepage
一个布尔值,它通知 Flash Player 是使用 Unicode 来解释外部文本文件,还是使用运行播放器的操作系统的传统代码页来解释外部文本文件。默认值为 false。
由于本文所调用的外部文件采用了GB2312,并非采用Unicode,因此必须将System.useCodepage=True, 当然如果你想确保在所有平台下运行正常,建议外部文件使用Unicode。
2、 attachMovie(MovieClip.attachMovie 方法)
3、新建影片剪辑pllist,在其中添加一个动态文本框,变量为tot,并将左距离与上距离分别设为10与520,同样设置其标识符为pllist,此影片剪辑主要用于显示整个评论列表。
4、新建影片剪辑gopage(翻页按钮),添加一个动态文本框,变量为curpage,用于显示页数,并为此影片添加第二帧,主要用于移上去所呈现的效果。
5、如图页面界面,在主场景中添加两个按钮ok和no,设置其在场景中的名称分别为tjpl与tjno,然后在主场景中添加两个动态文本框用于填写评论呢称与内容,设置其在场景中的名称分别为u、c,这里我们可以设置u的最大字符数为20,以保持和数据库对应,再次添加一个文本框用于信息提示,设置其变量为msg。
6、以上工作全部做好后,接下来就是添加代码了,当然如果你觉得界面还是不够漂亮,你可再调整调整,最后在主场景的第一帧添加如下代码:
System.useCodepage = true; //使用操作系统的传统代码页来解释外部文本文件
var xml = new XML(); //创建XML类
xml.load("pl_list.asp"); //加载外部文件
msg = "正在加载评论……";
xml.onLoad = function(ok) {
if (ok) {
init(); //加载成功后调用init函数
}
};
//解析外部文件
function init() {
_root.attachMovie("pllist", "pllist", 1); //为主场景添加一个pllist影片剪辑
_root.pllist.tot = "共"+xml.firstChild.attributes.tot+"条"+" 当前第"+xml.firstChild.attributes.curpage+"页";//获得所有评论数与当前页码
for (i=0; i
drawPllist(i);//绘制评论列表
}
_root.pagecount(xml.firstChild.attributes.tot);
msg = "加载成功";
}
//评论列表绘制函数
function drawPllist(c) {
_root.pllist.attachMovie("pl", "pl"+c, c);//将库中影片剪辑附加到pllist影片剪辑中
with (_root.pllist["pl"+c]) {//这句可以用with(eval("_root.pllist.pl"+c)){替换
_x = 20; //设置厅距离
_y = 20+c*100;//设置上距离
user = xml.firstChild.childNodes[c].childNodes[0];//获得呢称
dateandtime = xml.firstChild.childNodes[c].childNodes[1].toString();//获得评论时间
contents = xml.firstChild.childNodes[c].childNodes[2].toString();//获得评论内容
}
var xid = xml.firstChild.childNodes[c].childNodes[3].toString();//获得评论id,用于删除操作
_root.pllist["pl"+c].del.onRelease = function() {
xml.load("pl_del.asp?id="+substring(xid, 5, length(xid)-9));
xml.onLoad = function(ok) {
if (ok) {
msg = "删除成功!";
}
xml.load("pl_list.asp");//删除后再次加载
xml.onLoad = function(ok) {
if (ok) {
init();
}
};
};
};
}
//翻页处理
function pagecount(tot) {
if (tot%5 == 0) { //计算页数
pages = int(tot/5);
} else {
pages = int(tot/5)+1;
}
for (var j = 1; j<=pages; j++) {
drawpage(j);
}
}
//绘制翻页按钮
function drawpage(j) {
_root.pllist.attachMovie("gopage", "gopage"+j, j+10);
with (_root.pllist["gopage"+j]) {
_x = 100+j*30;
_y = 520;
curpage = j;
}
_root.pllist["gopage"+j].onRelease = function() {
xml.load("pl_list.asp?page="+j);
msg = "正在加载评论……";
xml.onLoad = function(ok) {
if (ok) {
init();
}
};
};
_root.pllist["gopage"+j].onRollOver = function() { this.gotoAndStop(2);
};
_root.pllist["gopage"+j].onRollOut = function() {
this.gotoAndStop(1);
};
}
//tjpl按钮事件,用于添加评论
_root.tjpl.onRelease = function() {
if (_root.u.text != "" and _root.c.text != "") {
_root.msg = "正在添加!";
xml.load("pl_fb.asp?newsid=1&user="+_root.u.text+"&content="+_root.c.text);
xml.onLoad = function(ok) {
if (ok) {
msg = "添加成功!";
}
xml.load("pl_list.asp");
xml.onLoad = function(ok) {
if (ok) {
init();
}
};
};
} else {
msg = "呢称或内容为空,添加失败!";
}
};
//tjno按钮事件,用于清空呢称与内容,以便重新填写
_root.tjno.onRelease = function() {
_root.c.text = "";
_root.u.text = "";
};
我希望大家在阅读本篇文章时能够与前一篇文章对比起来阅读,由于本文为了和上一篇文章对照,而且采用了与上一篇同样的服务器端代码,因此有些地方在程序开发时就显得不尽人意。例如在FLASH调用xml时,习惯用attributes这个对象去获得属性值,而本篇却全部采用了元素节点,害得文中在取删除id就只好通过字符串函数截取,希望大家在开发应用系统时注意。