天天看點

PHP 執行個體 - AJAX RSS 閱讀器

RSS 閱讀器用于閱讀 RSS Feed。

AJAX RSS 閱讀器

在下面的執行個體中,我們将示範一個 RSS 閱讀器,通過它,來自 RSS 的内容在網頁不進行重新整理的情況下被載入:

執行個體解釋 - HTML 頁面

當使用者在上面的下拉清單中選擇某個 RSS-feed 時,會執行名為 "showRSS()" 的函數。該函數由 "onchange" 事件觸發:

  1. <html>

    <head>

    <script>

    function showRSS(str)

    {

    if (str.length==0)

    {

    document.getElementById("rssOutput").innerHTML="";

    return;

    }

    if (window.XMLHttpRequest)

    {// code for IE7+, Firefox, Chrome, Opera, Safari

    xmlhttp=new XMLHttpRequest();

    else

    {// code for IE6, IE5

    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.onreadystatechange=function()

    if (xmlhttp.readyState==4 && xmlhttp.status==200)

    document.getElementById("rssOutput").innerHTML=xmlhttp.responseText;

    xmlhttp.open("GET","getrss.php?q="+str,true);

    xmlhttp.send();

    </script>

    </head>

    <body>

    <form>

    <select onchange="showRSS(this.value)">

    <option value="">Select an RSS-feed:</option>

    <option value="Google">Google News</option>

    <option value="MSNBC">MSNBC News</option>

    </select>

    </form>

    <br>

    <div id="rssOutput">RSS-feed will be listed here...</div>

    </body>

    </html>

複制

showRSS() 函數會執行以下步驟:

  • 檢查是否有 RSS-feed 被選擇
  • 建立 XMLHttpRequest 對象
  • 建立在伺服器響應就緒時執行的函數
  • 向伺服器上的檔案發送請求
  • 請注意添加到 URL 末端的參數(q)(包含下拉清單的内容)

PHP 檔案

上面這段通過 JavaScript 調用的伺服器頁面是名為 "getrss.php" 的 PHP 檔案:

  1. <?php

    //get the q parameter from URL

    $q=$_GET["q"];

    //find out which feed was selected

    if($q=="Google")

    $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");

    elseif($q=="MSNBC")

    $xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");

    $xmlDoc = new DOMDocument();

    $xmlDoc->load($xml);

    //get elements from "<channel>"

    $channel=$xmlDoc->getElementsByTagName('channel')->item(0);

    $channel_title = $channel->getElementsByTagName('title')

    ->item(0)->childNodes->item(0)->nodeValue;

    $channel_link = $channel->getElementsByTagName('link')

    $channel_desc = $channel->getElementsByTagName('description')

    //output elements from "<channel>"

    echo("<p><a href='" . $channel_link

    . "'>" . $channel_title . "</a>");

    echo("<br>");

    echo($channel_desc . "</p>");

    //get and output "<item>" elements

    $x=$xmlDoc->getElementsByTagName('item');

    for ($i=0; $i<=2; $i++)

    $item_title=$x->item($i)->getElementsByTagName('title')

    $item_link=$x->item($i)->getElementsByTagName('link')

    $item_desc=$x