最近比较容易冲动,这不昨天一冲动,研究了半天,晚上没睡觉,用js写了ajax的rss2的未化妆版的阅读器。本来是因为想找一个合适的yahoo widget用来read rss的,但是在网上找了很久都不如意,nnd,于是算了自己做一个吧。
关键还是使用ajax的过程吧,后来才发现yahoo widget他有他自己实现fetch的过程,所以最后写出来的代码,还必须好好改造一下才能用在yahoo widget上面。
正当发愁之际,想看看人家的yahoo widget是怎么写的,然后打开默认的my widget文件夹,找找自己感兴趣的widget研究一下,没想到竟然被我看到了rss reader。我的天啊!我怎么一开始没看到呢。适用了一下虽然只能订阅一个rss,但是还是挺漂亮的。于是放弃了把ajax迁移过来的想法。
总结一下用ajax写rss reader
下面就是样图,很朴素吧,呵呵 , 非常之土了,但是功能到了,如果一天以前的就会显示为以前的源,一天之内的会显示多少分钟之前的,自己可以设定多长时间重新获取。下面写的临时更新是我让他更新的时候打印出来给我看的,没有什么实际意义。
字串8
先是html页面 字串4
<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
<html>
<head>
<title>ajax测试</title>
<link href=”a.css” rel=”stylesheet” type=”text/css”/>
<script type=”text/javascript” src=”js/ajax.js”></script>
<script type=”text/javascript” src=”js/rss2reader.js”></script>
<script type=”text/javascript” src=”js/rssClass.js”></script>
<script type=”text/javascript” src=”js/display.js”></script>
<script type=”text/javascript”>
var requestUrl = “http://dongpingyuwen.blog.sohu.com/rss”
function iniPage(){
display.iniHolder(”holder”);
display.setTime(”time”);
if(initXMLHTTPRequest()!==null){
sendRequest(requestUrl,’1′,’GET’);
}
}
</script>
<meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″> 字串2
<meta http-equiv=”description” content=”this is my page”>
<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″>
</head>
<body onload=”iniPage()”>
<div id=”time”></div>
<br/>
<div id=”holder”></div>
<br/>
<input type=”hidden” name=”hd” id=”hd”/>
</body>
</html> 字串9
//然后是负责异步的ajax核心代码,一般都是大同小异
var req = null;
var console = null;
var ie = false;
var READY_STATE_UNINITIALIZED = 0;
var READY_STATE_LOADING = 1;
var READY_STATE_LOADED = 2;
var READY_STATE_INTERACTIVE = 3;
var READY_STATE_COMPLETE = 4; 字串8
function sendRequest(url,params,HttpMethod){
if(!HttpMethod){
HttpMethod = “GET”
}
req = initXMLHTTPRequest();
if(req){
req.onreadystatechange = onReadyState;
try{
req.open(HttpMethod,url,true);
}catch(error){
alert(error);
}
req.setRequestHeader(”Content-Type”,”application/x-www-form-urlencoded”);
req.send(null);
}
}
function initXMLHTTPRequest(){
var xRequest = null;
try {
ie=true;
xRequest = new ActiveXObject(”Msxml2.XMLHTTP”);
return xRequest;
} catch (othermicrosoft) {
try {
xRequest = new ActiveXObject(”Microsoft.XMLHTTP”);
return xRequest;
} catch (failed) {
ie = false;
try{
xRequest = new XMLHttpRequest();
return xRequest;
}catch(error){
alert(error);
}
}
}
}
function onReadyState(){
var ready = req.readyState;
var xml = null;
if(ready==READY_STATE_COMPLETE){
var result = document.getElementById(’result’);
if(req.status==200){
xml = req.responseXML;
rss2Reader.fetchRss(xml,10000,true);
}
else{
result.value = req.status;
}
}
else{
data = “loading…[” ready ”]”
}
} 字串2
//下面是自定义的保存rss节点信息的一些“类”和处理方法var rssClass = {};
rssClass.getChannelInfoInstance = function(channel){
var info = new Object();
var titleNodes = channel.getElementsByTagName(”title”);
var linkNodes = channel.getElementsByTagName(”link”);
var descriptionNodes = channel.getElementsByTagName(”description”);
var pubDateNodes = channel.getElementsByTagName(”pubDate”);
var generatorNodes = channel.getElementsByTagName(”generator”);

