开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1997|回复: 1
收起左侧

[PHP相关教程] [第四十六课]PHP 和 AJAX RSS 阅读器

[复制链接]

结帖率:33% (1/3)
发表于 2012-12-18 17:22:24 | 显示全部楼层 |阅读模式   上海市上海市

RSS 阅读器用于阅读 RSS Feed。

RSS 允许对新闻和更新进行快速浏览。


AJAX RSS 阅读器

在下面的 AJAX 实例中,我们将演示一个 RSS 阅读器,通过它,来自 RSS 的内容在不进行刷新的情况下载入网页。


在下面的列表框中选择一个 RSS 新闻订阅Select an RSS-Feed:  Google News MSNBC News
在此列出 RSS Feed。

本例包括三个元素:

  • 简单的 HTML 表单
  • JavaScript
  • PHP 页面

HTML 表单

这是 HTML 页面。它包含一个简单的 HTML 表单和执行一个 JavaScript 文件的链接:

  1. <html>
  2. <head>
  3. <script type="text/javascript" src="getrss.js"></script>
  4. </head>
  5. <body>

  6. <form>
  7. Select an RSS-Feed:
  8. <select onchange="showRSS(this.value)">
  9. <option value="Google">Google News</option>
  10. <option value="MSNBC">MSNBC News</option>
  11. </select>
  12. </form>

  13. <p><div id="rssOutput">
  14. <b>RSS Feed will be listed here.</b></div></p>
  15. </body>
  16. </html>
复制代码
例子解释 - HTML 表单

正如您看到的,上面的 HTML 页面包含一个简单的 HTML 表单,其中带有一个下拉列表框。

表单是这样工作的:

  • 当用户选择下拉框中的选项时,会触发一个事件
  • 当事件触发时,执行 showRSS() 函数

表单下面是名为 "rssOutput" 的一个 <div>。它用作 showRSS() 函数所返回的数据的占位符。



JavaScript

JavaScript 代码存储在 "getrss.js" 中,它与 HTML 文档相连接:

  1. var xmlHttp

  2. function showRSS(str)
  3. {
  4. xmlHttp=GetXmlHttpObject()
  5. if (xmlHttp==null)
  6.   {
  7.   alert ("Browser does not support HTTP Request")
  8.   return
  9.   }
  10. var url="getrss.php"
  11. url=url+"?q="+str
  12. url=url+"&sid="+Math.random()
  13. xmlHttp.onreadystatechange=stateChanged
  14. xmlHttp.open("GET",url,true)
  15. xmlHttp.send(null)
  16. }

  17. function stateChanged()
  18. {
  19. if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  20.   {
  21.   document.getElementById("rssOutput")
  22.   .innerHTML=xmlHttp.responseText
  23.   }
  24. }

  25. function GetXmlHttpObject()
  26. {
  27. var xmlHttp=null;
  28. try
  29. {
  30. // Firefox, Opera 8.0+, Safari
  31. xmlHttp=new XMLHttpRequest();
  32. }
  33. catch (e)
  34. {
  35. // Internet Explorer
  36. try
  37.   {
  38.   xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  39.   }
  40. catch (e)
  41.   {
  42.   xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  43.   }
  44. }
  45. return xmlHttp;
  46. }
复制代码
例子解释:

stateChanged() 和 GetXmlHttpObject 函数与 PHP 和 AJAX 请求 这一节中的例子相同。

showRSS() 函数

每当在下拉框中选择选择时,该函数就会执行:

  • 定义发送到服务器的 url (文件名)
  • 把参数 (q) 添加到 url,参数内容是下拉框中的被选项
  • 添加一个随机数,以防止服务器缓存文件
  • 调用 GetXmlHttpObject 函数来创建 XMLHTTP 对象,并告知该对象在触发一个改变时去执行 stateChanged 函数
  • 通过给定的 url 来打开 XMLHTTP
  • 把 HTTP 请求发动到服务器

PHP 页面

调用 JavaScript 代码的服务器页面是名为 "getrss.php" 的 PHP 文件:

  1. <?php
  2. //get the q parameter from URL
  3. $q=$_GET["q"];

  4. //find out which feed was selected
  5. if($q=="Google")
  6. {
  7. $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
  8. }
  9. elseif($q=="MSNBC")
  10. {
  11. $xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
  12. }

  13. $xmlDoc = new DOMDocument();
  14. $xmlDoc->load($xml);

  15. //get elements from "<channel>"
  16. $channel=$xmlDoc->getElementsByTagName('channel')->item(0);
  17. $channel_title = $channel->getElementsByTagName('title')
  18. ->item(0)->childNodes->item(0)->nodeValue;
  19. $channel_link = $channel->getElementsByTagName('link')
  20. ->item(0)->childNodes->item(0)->nodeValue;
  21. $channel_desc = $channel->getElementsByTagName('description')
  22. ->item(0)->childNodes->item(0)->nodeValue;

  23. //output elements from "<channel>"
  24. echo("<p><a href='" . $channel_link
  25. . "'>" . $channel_title . "</a>");
  26. echo("
  27. ");
  28. echo($channel_desc . "</p>");

  29. //get and output "<item>" elements
  30. $x=$xmlDoc->getElementsByTagName('item');
  31. for ($i=0; $i<=2; $i++)
  32. {
  33. $item_title=$x->item($i)->getElementsByTagName('title')
  34. ->item(0)->childNodes->item(0)->nodeValue;
  35. $item_link=$x->item($i)->getElementsByTagName('link')
  36. ->item(0)->childNodes->item(0)->nodeValue;
  37. $item_desc=$x->item($i)->getElementsByTagName('description')
  38. ->item(0)->childNodes->item(0)->nodeValue;

  39. echo ("<p><a href='" . $item_link
  40. . "'>" . $item_title . "</a>");
  41. echo ("
  42. ");
  43. echo ($item_desc . "</p>");
  44. }
  45. ?>
复制代码
例子解释:

当一个选项从 JavaScript 发送时,会发生:

  • PHP 找出哪个 RSS feed 被选中
  • 为选中的 RSS feed 创建 XML DOM 对象
  • 找到并输出来自 RSS 频道的元素
  • 遍历前三个 RSS 项目中的元素,并进行输出



结帖率:59% (17/29)
发表于 2012-12-18 17:50:05 | 显示全部楼层   江苏省连云港市
没看懂!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表