您的位置: 首页 > 技术文档 > 多媒体制作 > Flash & Ajax 操作 XML
回到列表 学习As2.0与AS3.0的尴尬
用户名:
密 码: 忘记密码
注册会员 游客参观 论坛帮助
 Flash & Ajax 操作 XML

作者:alphat 时间: 2006-07-18 文档类型:原创 来自:蓝色理想
浏览统计 total:728 | year:728 | Quarter:728 | Month:728 | Week:728 | today:15

Flash & Ajax 操作 XML 实例:无刷新分页

效果预览

其实标题只是一个噱头罢了,只是想谈一下,Javascript 与 Actionscript 是如何操作XML的。
希望能帮助一些只用 Javascript  或 只懂 Actionscript 的朋友,了解两者的相同与不同之处。

Flash 与 后台连接有许多种,Actionscript 调用 XML() 算是比较简单的一种了,
而Javascript 调用 xmlHttp ,便形成了现在很流行的Ajax了。

现在就用一个网上常出现的分页效果来对 Flash 和 Ajax 做个入门学习。 

实际运用中一般是通过后台脚本生成XML文件,再对其产生的数据进行操作
由于篇幅关系在本文中将用1.xml 2.xml 3.xml代替。后台脚本不做说明

首先了解一个XML的结构:

CODE:
<data>
  <movie id="1" type="爱情">幸福终点站</movie>
  <movie id="2" type="恐怖">绝命终结站</movie>
  <movie id="3" type="喜剧">恐怖电影</movie>
  …
  ….
</data>

从简单的Flash开始吧

CODE:
function setxml(page){
  pageXml = new XML();  //申明XML对象
  pageXml.ignoreWhite = true;  //允许空白
  pageXml.load(page+".xml?rid="+Math.random());  //读取XML文件
  pageXml.onLoad = function(success)
  {
    if (success)
      {
      parseXml(pageXml);  //如果读取成功,分析XML文件
    }
  }
}
function parseXml(pageXml){
  xmlroot = ageXml.firstChild;  //定义XML根目录
  for (i=0;i<xmlroot.childNodes.length;i++)
  {
    attachMovie("tr","tr_"+i,i);  //生成行
    this["tr_"+i]._x = 13;
    this["tr_"+i]._y = 25*i+33;
    this["tr_"+i].no = xmlroot.childNodes[i].attributes.id;  //取得一条记录的ID
    this["tr_"+i].name = xmlroot.childNodes[i].firstChild;  //片名
    this["tr_"+i].type = xmlroot.childNodes[i].attributes.type;  //类型
    page = pageXml.firstChild.attributes.page;  //获取当前页
  }
}
if (!page)  //初始页码为第一页 page=1;
  setxml(page);  //初始第一页内容
presetxmlbtn.onRelease = function()
{
  setxml(page*1-1);  //向前翻页,读取内容
}         
nextbtn.onRelease = function()
{
  setxml(page*1+1);  //向后翻页,读取内容
}

接下来是Ajax了

CODE:

var xmlHttp

/*
第一部分是有关xmlHttp的申明,因为IE和其它一些浏览生成xmlHttp的对象有一点两样,所以申明时比较麻烦
其它主要功能相当于Flash方式中的 "new XML()" 当然还包函其它功能
*/
function GetXmlHttpObject(handler)
{
  var objXmlHttp=null;
  if (navigator.userAgent.indexOf("MSIE")>=0)
  {
    var strName="Msxml2.XMLHTTP";
    if (navigator.appVersion.indexOf("MSIE 5.5")>=0)  //既使是IE都有两种申明方式
    {
      strName="Microsoft.XMLHTTP";
    }
    try
    {
      objXmlHttp=new ActiveXObject(strName);
      objXmlHttp.onreadystatechange=handler;
      return objXmlHttp;
    }
    catch(e)
    {
      alert("Error. Scripting for ActiveX might be disabled");
      return;
    }
  }
  else
  {
    objXmlHttp=new XMLHttpRequest();  //Firefox、Opera等都是用这种
    objXmlHttp.onload=handler;
    objXmlHttp.onerror=handler;
    return objXmlHttp;
  }
}

//首先要被调用的函数,可看作上面Flash中的 setxml()函数,
function showpage(no)
{
  document.getElementById("loadstatus").innerHTML = "Lading…";
  var url = no+".xml?rid="+Math.random();
  //stateChanged_showplist是下面的函数名,注意的是不要加括号
  xmlHttp=GetXmlHttpObject(stateChanged_showplist);
  //传递方式是GET,也可以选择POST方式,有时传递变量是中文要记得设置文件头                  
  xmlHttp.open("GET", url , true);
  xmlHttp.send(null);
}

//分析XML函数
function stateChanged_showplist()
{
  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") //xmlHttp.readyState==4  4表示读取结束
  {
    document.getElementById("loadstatus").innerHTML = " ";
    table = document.getElementById("pagebody");//生成TALBE Element
    for (i = table.rows.length-1; i >= 0; i–)   //要删除原来有的行,不然表格会无限延伸
      table.deleteRow(i);
    xmlroot = xmlHttp.responseXML.getElementsByTagName("movie");  //取得XML所需要的根
   
    for (i=0;i<xmlroot.length;i++)
    {
      //简单的DOM,生成表格。
      tr = table.insertRow(-1);
      td = tr.insertCell(-1);
      td.align = "center";
      td.innerHTML = ‘<span class="warntxt">’+xmlroot[i].getAttribute(’id’)+’</span>’;
      td = tr.insertCell(-1);
      td.innerHTML = xmlroot[i].firstChild.data;
      td = tr.insertCell(-1);
      td.innerHTML = xmlroot[i].getAttribute(’type’);
    }

    //定义翻页链接
    page = xmlHttp.responseXML.getElementsByTagName("data")[0].getAttribute(’page’)
    if (page >1)
    {
      prepage = page*1-1;
      var changpage = "<a href=’javascript:showpage("+ prepage +")’>上一页</a> ";
    }
    else
    {
      changpage = "上一页 ";
    }
    if (page <3)
    {
      nextpage = page*1+1;
      changpage += "<a href=’javascript:showpage("+ nextpage +")’>下一页</a> ";
    }
    else{
      changpage += "下一页 ";
    }
    document.getElementById("changpage").innerHTML = changpage;
  }
}

经典论坛讨论:
http://bbs.blueidea.com/viewthread.php?tid=2548170

出处:蓝色理想
责任编辑:moby

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
XML+XSL+CSS+ASP打造留言簿
AJAX应用之注册用户即时检测
[FLASH]爽快使用XML
AS3中与服务器交互
Flash Pro 8中文版新特性详解
作者文章
十分钟学会 xajax
全网 本站 论坛
热门搜索:CSS Fireworks 设计比赛 网页制作 Dreamweaver Studio8 Flash
站点最新 站点最新列表
redrocker 图标设计(二)
黄昏中,我走过温暖
Fireworks 制作铁锈字
怎么用javascript进行拖拽
无限级JavaScript下拉列表菜单
北京非物质遗产保护展—偶人篇
条形码艺术
AJAX初体验之上手篇
一花一世界
搜索引擎大搜罗
栏目最新 栏目最新列表
Fireworks 制作铁锈字
怎么用javascript进行拖拽
AJAX初体验之上手篇
搜索引擎大搜罗
[效果]DIV+CSS 相册
怎样学习 Fireworks
!important和(空格)/**/:的组合
Flash & Ajax 操作 XML
XML+XSL+CSS+ASP打造留言簿
Fireworks 画竹子

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

本文暂时没有评论和评分

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
《Flash第一步系列》
《交互设计之路》
《Dreamweaver 从基础到实践》
《色彩管理》
《网页设计专家门诊》
《情感化设计》
《GUI设计禁忌》