Flash & Ajax 操作 XML 實例:無刷新分頁
效果預覽
其實標題只是一個噱頭罷了,只是想談一下,Javascript 與 Actionscript 是如何操作XML的。 希望能幫助一些只用 Javascript 或 只懂 Actionscript 的朋友,了解兩者的相同與不同之處。
Flash 與 后臺連接有許多種,Actionscript 調(diào)用 XML() 算是比較簡單的一種了, 而Javascript 調(diào)用 xmlHttp ,便形成了現(xiàn)在很流行的Ajax了。
現(xiàn)在就用一個網(wǎng)上常出現(xiàn)的分頁效果來對 Flash 和 Ajax 做個入門學習。
實際運用中一般是通過后臺腳本生成XML文件,再對其產(chǎn)生的數(shù)據(jù)進行操作 由于篇幅關(guān)系在本文中將用1.xml 2.xml 3.xml代替。后臺腳本不做說明
首先了解一個XML的結(jié)構(gòu):
CODE: <data> <movie id="1" type="愛情">幸福終點站</movie> <movie id="2" type="恐怖">絕命終結(jié)站</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); //初始第一頁內(nèi)容 presetxmlbtn.onRelease = function() { setxml(page*1-1); //向前翻頁,讀取內(nèi)容 } nextbtn.onRelease = function() { setxml(page*1+1); //向后翻頁,讀取內(nèi)容 }
接下來是Ajax了
CODE:
var xmlHttp
/* 第一部分是有關(guān)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; } }
//首先要被調(diào)用的函數(shù),可看作上面Flash中的 setxml()函數(shù), function showpage(no) { document.getElementById("loadstatus").innerHTML = "Lading…"; var url = no+".xml?rid="+Math.random(); //stateChanged_showplist是下面的函數(shù)名,注意的是不要加括號 xmlHttp=GetXmlHttpObject(stateChanged_showplist); //傳遞方式是GET,也可以選擇POST方式,有時傳遞變量是中文要記得設置文件頭 xmlHttp.open("GET", url , true); xmlHttp.send(null); }
//分析XML函數(shù) function stateChanged_showplist() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") //xmlHttp.readyState==4 4表示讀取結(jié)束 { 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; } }
經(jīng)典論壇討論: http://bbs.blueidea.com/viewthread.php?tid=2548170
出處:藍色理想
責任編輯:moby
◎進入論壇Flash專欄版塊參加討論
|