<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    emu in blogjava

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      171 隨筆 :: 103 文章 :: 1052 評論 :: 2 Trackbacks

    在上一篇《Ajax裸奔》中,我們定義了如此一個xml文件:

    news.xml:

     

    <?xml version="1.0" encoding="gb2312"?>
    <data>
     焦點|工行小額賬戶明年收費 不足300元要歸并
    &lt;br /&gt;
     財經|
    &quot;神六&quot;飛行開銷僅為美航天飛機4.5% 花9億&lt;br /&gt;
     財經|2005能源富豪榜揭榜 超市要撤致癌保鮮膜
    &lt;br /&gt;
     證券|神六催生高價股 MBO公司股改 高管一夜暴富
    &lt;br /&gt;
     證券|保險公司告基金利益輸送 科龍管理班子亮相 
    &lt;br /&gt;
     科技|神六飛船成功著陸 載人飛行取得圓滿成功
    &lt;br /&gt;
     關注|索尼中國不裁員 夏普與南京熊貓分道揚鑣 
    &lt;br /&gt;
     熱點|北電任命新總裁兼CEO 索愛發布第三季財報
    &lt;br /&gt;
     數碼|300萬像素手機推薦 最有降價潛力手機導購
    &lt;br /&gt;
     測評|近期五大DC跳水王 怪模怪樣個性手機推薦
    &lt;br /&gt;
     探索|亞歷山大古城的文化歷史 勝利者改寫歷史 
    &lt;br /&gt;
    </data>

     

    這確確實實是一個合法的xml文件,但是不是一個漂亮的xml文件。xml語言的一個巨大的優勢是自說明性。上面這個xml語言只說明了一件事:我有一堆數據(data標記),大家拿去用阿。可是怎么用呢,只能靠約定了。
    一個漂亮一點的xml應該像這樣:

    news2.xml:

    <?xml version="1.0" encoding="gb2312"?>
    <newsList>
     
    <title type="焦點">工行小額賬戶明年收費 不足300元要歸并</title>
     
    <title type="財經">&quot;神六&quot;飛行開銷僅為美航天飛機4.5% 花9億</title>
     
    <title type="財經">2005能源富豪榜揭榜 超市要撤致癌保鮮膜</title>
     
    <title type="證券">神六催生高價股 MBO公司股改 高管一夜暴富</title>
     
    <title type="證券">保險公司告基金利益輸送 科龍管理班子亮相</title>
     
    <title type="科技">神六飛船成功著陸 載人飛行取得圓滿成功</title>
     
    <title type="關注">索尼中國不裁員 夏普與南京熊貓分道揚鑣</title>
     
    <title type="熱點">北電任命新總裁兼CEO 索愛發布第三季財報</title>
     
    <title type="數碼">300萬像素手機推薦 最有降價潛力手機導購</title>
     
    <title type="測評">近期五大DC跳水王 怪模怪樣個性手機推薦</title>
     
    <title type="探索">亞歷山大古城的文化歷史 勝利者改寫歷史 </title>
    </newsList>

    這個xml非常好的說明了所有的事情:xml的內容是新聞標題,每個標題的分類是什么,標題內容是什么,一目了然,甚至一個不懂中文的程序員也可以從xml標記和層次中了解到這些信息,不需要多余的猜測和約定。

    第一種方式,我通常稱之為AJaH(Asynchronous Javascript and Hyper-text),第二種,我才稱為真正的Ajax。

    開發Ajax應用中,我們經常要面臨的一個選擇就是,用上面AJaH的方式還是下面Ajax的方式來組織數據。這并不是可以簡單的一刀切的問題,很大程度上取決于開發者對各方面優劣的取舍。我在這里只把兩者的優劣大概的列一下。
    1 Ajax比較好聽,有個球隊叫阿賈克斯的就是這么拼的,AjaH就不知道要怎么念才好聽了:)
    2 AjaH解析起來更容易更快。按照約定包裝好的數據只需要最少的加工就可以使用了,按照規范形式包裝的數據需要相對復雜的解析過程
    3 Ajax更加通用。用Ajax我們很容易就可以吧同一個CGI(廣義的cgi)生成的xml數據使用在任何不同的場合,而不需要后臺服務程序做出任何修改,用AjaH的話就很可能需要為相同的數據做出不同的版本。
    4 AjaX更不容易出錯,需要的時候我們可以建立DTD或者xmlschema來自動校驗xml數據的正確性,二AjaH的正確性則需要手工驗證來保障。
    5 Ajax更容易維護和修改。AjaH的數據中往往整合了html/css美工效果和上下文相關的javascript代碼,混合編碼造成了代碼維護的代價比較高。

    作為對比,我們試試解析新的news2.xml文件來生成頁面:

    betterAjax.html:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
     
    <meta http-equiv="Content-Type" content="text/html; charset=gb18030" />
     
    <meta name="Author" content="emu" />
     
    <meta name="Keywords" content="ajax" />
     
    <title> 更好的Ajax例子 </title>
     
    <script type="text/JavaScript">
     
    <!--
     
    var newsXML;
     
    function init(){
      newsXML 
    = window.XMLHttpRequest?(new XMLHttpRequest()):(new ActiveXObject("Microsoft.XMLHTTP"));
      newsXML.onreadystatechange
    = handleXML;
      newsXML.open(
    "GET","news2.xml",true);
      newsXML.send(
    null);
     }
     
    function handleXML(){
      
    if(newsXML.readyState==4){
       
    var titleList = newsXML.responseXML.getElementsByTagName("title");
       
    var st = "";
       
    for(var i=0;i<titleList.length;i++){
        x 
    = titleList[i];
        st 
    += x.getAttribute("type")+"|"+(x.text?x.text:x.textContent)+"<br />";
       }
       document.body.innerHTML
    =st;
      }
     }
     
    //-->
     </script>
    </head>
    <body onload="init()">
    </body>
    </html>

     

    其實做起來也很容易,對不對?把這個頁面和前面的news2.xml放到同一個目錄下發布即可運行。

    本文全部原碼下載

    posted on 2006-01-26 17:00 emu 閱讀(1999) 評論(10)  編輯  收藏

    評論

    # re: Ajax還是Ajah,這是個問題 2006-02-02 14:50
    為何我無法運行成功?
    emu能否再測試一下?

    就是setp7,還有betterAjax文件

    step7的提示
    Line:21
    Char:4
    Code:0
    Error:Object required
    URL:file://C:\Documents and Settings\Jay-DotKu\My Documents\work\ajax\Ajax01\step7.html

    betterAjax則是沒有反應  回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-02-02 15:40 emu
    因為你沒有把文件用一個http服務器發布出來。
    xmlhttprequest不能訪問本地文件系統,需要建立http連接才可以。  回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-02-03 15:01 dingsea
    好文啊,黃老大!
    標記一下。
      回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-03-17 09:25 tonghu006
    你好,emu,你的這個例子我把它放到IIS中運行怎么運行不出結果來呢,betterajax.html和step7.html  回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-03-17 09:30 tonghu006
    betterajax.html這個不能運行出效果來,step7.htm現在可以在iis中運行
      回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-03-17 14:33 emu
    呵呵,我不知道。遇到問題要自己調試。  回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-05-11 10:26 worldlover
    betterajax.html這個文件運行后沒有任何效果,也沒有提示錯誤,這是怎么會事呀????  回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-05-22 10:34 tonghu008
    請教一個問題,我用ajax,在服務器的后臺中我用一個循環送出xml,那么我在客戶端接受xml的時候是不是還是要循環接受呢?要是用循環來實現好象不行,怎么才能接受服務器端循環送出的xml文檔呢?請指教指教,謝謝!  回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-07-14 10:13 aoyuxuan
    emu,你的文章太帥了。我一直都在為怎么在多瀏覽器讀取xml發愁呢。我是初學者,所以有些糊涂,但是你的文章后,猶如醍醐灌頂阿。好文,言簡意賅。^_^
    我還有一個問題,關于xml讀取后,做了一個超鏈接。
    怎么樣能做到,點擊超鏈接后傳到一個頁面后,在另一個頁面實現根據傳得參數調取相應的數據。
    就像使用asp,php那樣,例 發出頁面 http://xxx.asp?title=xxx
    接受頁面 http://yyy.asp
    接受后,根據xxx調出相應的內容。
    用aJax 怎么作?  回復  更多評論
      

    # re: Ajax還是Ajah,這是個問題 2006-07-15 14:34 emu
    這個跟ajax沒用關系了,在yyy.asp上可一通過referrer獲得發出頁面的地址信息來分析(在服務器端和瀏覽器端獲得的方式有點區別),不過更好的做法應該是顯式的傳遞參數:
    http://yyy.asp?title=xxx  回復  更多評論
      


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 久久久久国产精品免费网站| 一个人看的在线免费视频| 亚洲色偷偷狠狠综合网| 亚洲av中文无码乱人伦在线r▽| 久热免费在线视频| 免费人成在线观看网站品爱网日本| 国产亚洲福利精品一区| 免费福利网站在线观看| 亚洲av无码一区二区三区乱子伦| 美女18一级毛片免费看| 成人毛片免费在线观看| 日本一道一区二区免费看| 亚洲欧洲国产成人精品| 精品亚洲成在人线AV无码| 黄网站色视频免费看无下截| 亚洲欧美日韩一区二区三区| 免费看韩国黄a片在线观看| 很黄很污的网站免费| 日韩免费无码一区二区视频| 无人在线观看免费高清| 性感美女视频在线观看免费精品| 91精品国产亚洲爽啪在线影院| 热99re久久精品精品免费| 亚洲一区二区三区国产精品无码| 亚洲乱亚洲乱少妇无码| 妻子5免费完整高清电视| 33333在线亚洲| 999国内精品永久免费观看| 污污视频网站免费观看| 国产成人无码a区在线观看视频免费| 日韩精品免费在线视频| 三级片免费观看久久| 亚洲av麻豆aⅴ无码电影| 亚洲视频一区调教| 亚洲美免无码中文字幕在线| 久热免费在线视频| 午夜影视日本亚洲欧洲精品一区| 久久久亚洲精品视频| 亚洲精品午夜无码专区| 久久国产精品免费观看| 免费国产a国产片高清网站|