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

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

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

    ☆藍(lán)色夢(mèng)想☆

    世界總是反反覆覆錯(cuò)錯(cuò)落落地飄去 來不及嘆息 生活不是平平淡淡從從容容的東西 不能放棄
    posts - 57, comments - 5, trackbacks - 0, articles - 0
    在這個(gè)關(guān)于AJAX系列的第三部分中,我們將學(xué)習(xí)如何使用AJAX與服務(wù)端進(jìn)行寫作以及這些技術(shù)如何產(chǎn)生強(qiáng)大的web應(yīng)用程序。如果你對(duì)學(xué)習(xí)如何構(gòu)建類似GMail或者Google Maps的web程序感興趣的話,這是一篇基礎(chǔ)的入門(雖然那兩個(gè)東東會(huì)比我們?cè)谶@篇文章中提及的內(nèi)容復(fù)雜的多)。在這篇文章中,我使用PHP作為服務(wù)端語言,但AJAX能夠和任何服務(wù)端語言進(jìn)行很好的兼容,所以你盡可以選擇你所鐘愛的任何語言!

      我們還是從我們上一篇文章的代碼(喏,就在上面)開始我們的學(xué)習(xí),你可以去閱讀它來作為參考。

      這里就是這個(gè)HTML頁面(帶js):
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd">
    <html lang="zh-cn" dir="ltr">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>如何使用ajax開發(fā)web應(yīng)用程序--示例</title>
    <script type="text/javascript"><!--
    function ajaxRead(file){
      var xmlObj = null;
      if(window.XMLHttpRequest){
        xmlObj = new XMLHttpRequest();
      } else if(window.ActiveXObject){
        xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
      } else {
        return;
      }
      xmlObj.onreadystatechange = function(){
      if(xmlObj.readyState == 4){
        processXML(xmlObj.responseXML);
      }
      }
      xmlObj.open ('GET', file, true);
      xmlObj.send ('');
    }
    function processXML(obj){
      var dataArray = obj.getElementsByTagName('pets')[0].childNodes;
      var dataArrayLen = dataArray.length;
      var insertData = '<table><tr><th>'
      + 'Pets</th><th>Tasks</th></tr>';
      for (var i=0; i<dataArrayLen; i++){
      if(dataArray[i].tagName){
        insertData += '<tr><td>' + dataArray[i].tagName + '</td>'
                + '<td>' + dataArray[i].getAttribute('tasks') + '</td></tr>';
      }
      }
      insertData += '</table>';
      document.getElementById ('dataArea').innerHTML = insertData;
    }
    //--></script>
    <style type="text/css"><!--
    table, tr, th, td {
      border: solid 1px #000;
      border-collapse: collapse;
      padding: 5px;
    }
    --></style>
    </head>
    <body>
    <h1>使用Ajax開發(fā)web應(yīng)用程序</h1>
    <p>這個(gè)頁面演示了AJAX技術(shù)如何通過動(dòng)態(tài)讀取一個(gè)遠(yuǎn)程文件來更新一個(gè)網(wǎng)頁的內(nèi)容--不需要任何網(wǎng)頁的重新加載。注意:這個(gè)例子對(duì)于禁止js的用戶來說沒有效果。</p>
    <p>這個(gè)頁面將演示如從取回并處理成組的XML數(shù)據(jù)。被取回的數(shù)據(jù)將會(huì)以表格形式輸出到底下。
    <a href="#" onclick="ajaxRead('data_3.php'); return false">查看演示</a>.</p>
    <div id="dataArea"></div>
    </body>
    </html>


    (sheneyan注:示例見http://sheneyan.com/html/article/ajax/example_3.html)
      注意:這里唯一的變化就是我們將我們的ajaxRead()中的“data_2.xml”改成了“data_3.php”。這是因?yàn)槲覀儗⑹褂胮hp來輸出XML(如果你在你的瀏覽器里打開這個(gè)PHP文件,它會(huì)以一個(gè)XML文件的形式展現(xiàn)出來--我們只是要在這個(gè)文件中進(jìn)行操作而不只是一個(gè)簡(jiǎn)單的XML)。這個(gè)PHP文件的輸出類似:
    <?xml version="1.0" encoding="UTF-8"?>
    <data>
    <pets>
      <貓 tasks="喂食, 飲水, 抓跳蚤" />
      <狗 tasks="喂食, 飲水, 帶出去遛遛" />
      <魚 tasks="喂食, 檢查氧氣,水的純度,其它" />
    </pets>
    </data>


    (Sheneyan注:示例就不提供了,參考底下說明即可。)

      這只是輸出結(jié)果,我們準(zhǔn)備從一個(gè)mysql數(shù)據(jù)庫中獲取這些信息。從現(xiàn)在起,我們可以直接在我們的數(shù)據(jù)庫中修改數(shù)據(jù)而不是手動(dòng)修改XML文件。用AJAX通過PHP來取得數(shù)據(jù),并將它獲取到一個(gè)頁面上--所有這些,仍然不需要重新加載網(wǎng)頁。

      第一步是連接到mysql去獲取數(shù)據(jù)。這篇文章的重點(diǎn)在javascript,所以我不會(huì)解釋下面的代碼如何工作,你需要自己去了解如何連接mysql數(shù)據(jù)庫。
    <?php
    $user = "admin";
    $pass = "adminpass";
    $host = "localhost";
    $conn = mysql_connect($host, $user, $pass) or die("Unable to connect to MySQL.");
    $db   = mysql_select_db("pets",$conn) or die("Could not select the database.");
    mysql_close($db);
    ?>



      只要你連接了數(shù)據(jù)庫,你可以通過底下的查詢來獲取信息:
    <?php
    $user = "admin";
    $pass = "adminpass";
    $host = "localhost";
    $conn = mysql_connect($host, $user, $pass) or die("Unable to connect to MySQL.");
    $db   = mysql_select_db("pets",$conn) or die("Could not select the database.");
    $result = mysql_query("SELECT * FROM `pets`");
    if(mysql_num_rows ($result) == 0){
      die ('Error: no data found in the database.');
    }
    while ($row = mysql_fetch_assoc($result)){
      echo 'Pet: '.$row['pet'].', tasks: '.$row['tasks'].'. ';
    }

    mysql_close($db);
    ?>



      這段代碼給了你需要的信息,但它輸出并不正確。我們需要修改這PHP代碼來分隔數(shù)據(jù)為XML,而不是純文本。為了實(shí)現(xiàn)這個(gè)目標(biāo)我們得作幾個(gè)修改。

    <?php
    header('Content-Type: text/xml');//編號(hào)1
    echo '<?xml version="1.0" encoding="UTF-8"?>';//編號(hào)2
    echo "\n<data>\n<pets>\n";//編號(hào)3
    $user = "admin";
    $pass = "adminpass";
    $host = "localhost";
    $conn = mysql_connect($host, $user, $pass) or die("無法連接mysql.");
    $db   = mysql_select_db("pets",$conn) or die("無法選擇數(shù)據(jù)庫.");
    $result = mysql_query("SELECT * FROM `pets`");
    if(mysql_num_rows ($result) == 0){
      die ('Error: 數(shù)據(jù)庫沒有數(shù)據(jù).');
    }
    while ($row = mysql_fetch_assoc($result)){
      echo '<'.$row['pet'].' tasks="'.$row['tasks'].'" />'."\n";//編號(hào)4
    }
    echo "</pets>\n</data>";//編號(hào)5
    mysql_close($db);
    ?>



      讓我們從上面開始,一次一行的來分析它是如何輸出XML的.我給每一行都加了注釋標(biāo)記以便于更好的對(duì)應(yīng)理解(原文是I've color-coded each line to make it easier to understand,我懶得上色,就改成用編號(hào)了)

      編號(hào)1:這部分代碼發(fā)送一個(gè)http頭來讓用戶客戶端明白這個(gè)php文件輸出的是一個(gè)XML。這就是為什么你在你的瀏覽器里看這個(gè)文檔的時(shí)候它以一個(gè)XML文件的形式展現(xiàn),即使你的文件有一個(gè)“.php”后綴。

      編號(hào)2:這部分的代碼輸出了XML聲明。這是我之前展示給你看的XML的第一行。

      編號(hào)3:這部分的代碼輸出的最開始的兩個(gè)標(biāo)簽:我們的根標(biāo)簽,<data>和我們用來放置所有寵物的<pets>標(biāo)簽。

      編號(hào)4:這部分的代碼最困難的。這里包含了一個(gè)循環(huán)用來遍歷你數(shù)據(jù)庫里所有的數(shù)據(jù)。每次循環(huán),它會(huì)輸出一個(gè)新的節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)用每一種動(dòng)物作為標(biāo)簽名以及一個(gè)"任務(wù)"屬性。例如,如果你數(shù)據(jù)庫中的第一只寵物是“貓”而且它相應(yīng)的任務(wù)字段是“喂食, 飲水, 抓跳蚤”,那php將輸出在XML文檔中輸出 <貓 tasks="喂食, 飲水, 抓跳蚤" /> 。這個(gè)“\n” 部分只是在結(jié)尾插入一個(gè)新行,保證這個(gè)XML代碼不至于都在同一行。

      編號(hào)5:這部分的代碼結(jié)束了 我們開始時(shí)打開的</pets> 和 </data> 節(jié)點(diǎn)。因?yàn)閄ML必須是格式良好的(well-formed),所以我們必須認(rèn)真對(duì)待這部分以確認(rèn)我們的程序能夠正確運(yùn)行。

      現(xiàn)在我們已經(jīng)讓PHP輸出XML了,我們現(xiàn)在所要作的就是登錄我們的mysql數(shù)據(jù)庫,并進(jìn)行我們所需要的修改,來更新這個(gè)XML。很酷,不是嗎?我們?nèi)匀荒軌蚴褂蒙弦黄恼轮械膉s腳本來獲取代碼,因?yàn)閄ML輸出和之前的完全一樣。

    結(jié)論

      你可以再進(jìn)一步的擴(kuò)展,使用XML來保存和獲取數(shù)據(jù)。換句話說,你能夠使用php來寫你的XML文件,然后讓javascript來讀。用ajax,你也能夠定時(shí)的檢查xml文件是否已經(jīng)更改而且,如果XML已經(jīng)更新,也可以更新本頁面。

    主站蜘蛛池模板: 亚洲国产精品无码久久久| 美女又黄又免费的视频| 人妻视频一区二区三区免费| 亚洲成在人线在线播放无码| 美女被免费网站91色| 亚洲视频在线观看网址| 国产成人免费ā片在线观看| 亚洲欧美日韩中文高清www777 | 久久亚洲精品无码播放| 1000部夫妻午夜免费| 亚洲最大的成网4438| 日本牲交大片免费观看| 久久青草免费91观看| 精品亚洲成A人在线观看青青| 亚洲va久久久噜噜噜久久男同| 无码高潮少妇毛多水多水免费| 色天使亚洲综合在线观看| 成人毛片免费观看视频大全| 中文无码日韩欧免费视频| 亚洲色偷精品一区二区三区| 亚洲国产成人一区二区三区| 日韩伦理片电影在线免费观看| 国产精品99久久免费观看| 污污免费在线观看| 色噜噜亚洲精品中文字幕| 91福利免费网站在线观看| 亚洲精品国产suv一区88| 亚洲国产一区国产亚洲| 亚洲人成网站在线观看青青| 最近最新中文字幕完整版免费高清| 免费成人在线电影| 人人爽人人爽人人片A免费 | 深夜a级毛片免费无码| 国产成人精品日本亚洲专| 亚洲国产日韩一区高清在线| 亚洲精品无码99在线观看 | 亚洲香蕉网久久综合影视| 国产精品久久久久影院免费| av大片在线无码免费| 日韩在线视精品在亚洲| 亚洲一区二区三区久久|