1. 程式人生 > >HTML/Ajax/XML資料互動:HTML通過Ajax讀取XML的儲存資訊

HTML/Ajax/XML資料互動:HTML通過Ajax讀取XML的儲存資訊

    介紹:

    上一篇Ajax文章中對Ajax的XHR物件作出了介紹,這篇部落格介紹下如果使用Ajax從服務端獲取資料。之前分析

過,Ajax是向服務端請求服務的,說白了就是想資料庫中進行資訊驗證或取存。本篇部落格沒有使用資料庫而是採用了

XML儲存資料,這樣大家看的也清楚。能明白來龍去脈。

分析實現過程:

    需要的檔案:HTML頁面、【.js】檔案、【.XML】檔案。

    實現的思路:

        首先在HTML設定好提交事件,並且設定一個div(或其它)容器,準備接受資料;

        其次是在js檔案中寫好使用Ajax的五個步驟,(將open方法的URL地址改成專案中Xml檔案所在的地址)。

        最後使用Xml語言寫入一些儲存的資料,方便查詢。

    程式碼:

    HTML:

<span style="font-family:SimSun;font-size:18px;"><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script src="ReadXmk.js"></script>
    <title>Ajax/XML</title>
</head>
<body>
    <form id="form1" runat="server">
    
    <div id="CDShow">       
    <button onclick="loadXMLDoc('XMLFile1.xml')">獲取詳細資訊</button>
    </div>
    </form>
</body>
</html>
</span>

     JavaScript(Ajax):

<span style="font-family:SimSun;font-size:18px;">function loadXMLDoc(url)
{
    //alert(url);
    var xmlhttp;
    var txt, x, xx, i;
    //建立Ajax物件。解決不同瀏覽器相容問題
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //alert(1);
    //響應服務
    xmlhttp.onreadystatechange = function () {
           //4表示請求處理中;200表示處理OK;
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            //拼接table 表格
            //建立table,表頭為title 和artist和county
            txt = "<table border='1'><tr><th>Title</th><th>Artist</th><th>County</th></tr>";
            //從xml中獲取CD標籤裡的內容
            x = xmlhttp.responseXML.documentElement.getElementsByTagName("CD");
            for (i = 0; i < x.length; i++) {
                //新增新的一行,標籤內容為Title
                txt = txt + "<tr>";
                xx = x[i].getElementsByTagName("TITLE");
  
                {
                    try {
                        txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                    }
                    catch (er) {
                        txt = txt + "<td> </td>";
                    }
                }
                xx = x[i].getElementsByTagName("COUNTRY");
                {
                    try {
                        txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                    }
                    catch (er) {
                        txt = txt + "<td> </td>";
                    }
                }
                xx = x[i].getElementsByTagName("ARTIST");
                {
                    try {
                        txt = txt + "<td>" + xx[0].firstChild.nodeValue + "</td>";
                    }
                    catch (er) {
                        txt = txt + "<td> </td>";
                    }
                }
                txt = txt + "</tr>";
            }
            //完成table表格拼接
            txt = txt + "</table>";
            //將table插入
            document.getElementById('CDShow').innerHTML = txt;
        }
    }
    //xmlhttprequest 的方法 open 和send
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
    alert("載入完成!");
}</span>

     XML:

<span style="font-family:SimSun;font-size:18px;"><CATALOG>
  <CD>
    <TITLE>Empire Burlesque</TITLE>
    <ARTIST>Bob Dylan</ARTIST>
    <COUNTRY>USA</COUNTRY>
    <COMPANY>Columbia</COMPANY>
    <PRICE>10.90</PRICE>
    <YEAR>1985</YEAR>
  </CD>
  <CD>
    <TITLE>Hide your heart</TITLE>
    <ARTIST>Bonnie Tyler</ARTIST>
    <COUNTRY>UK</COUNTRY>
    <COMPANY>CBS Records</COMPANY>
    <PRICE>9.90</PRICE>
    <YEAR>1988</YEAR>
  </CD>
  <CD>...</CD>
  <CD>...</CD>
  ...
  <CATALOG/></span>

      效果:


      觸發單擊事件後:


    學習資料:JavaScript入門經典 

              W3C教程

    總結:

        Ajax中的onReadyStateChange被回撥函式賦值,這是實現非同步呼叫的關鍵點,另外回撥函式直接操作DOM,

所以才能實現區域性的重新整理,而不是整個頁面的重新整理。

        學習還很單純,有說的不對的,請指出,謝謝!!!