开发者社区> pollyduan> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Ajax 解析RSS

简介:    RSS          Loading....  此代码对于标准的rss,可以正常运行,并兼容IE和FireFox。不过有些网站提供的RSS不规范,导致无法正常解析,比如cnBeta的rss,内容看起来正常,但是他的Content-Type错误。
+关注继续查看

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> RSS </TITLE>
 <SCRIPT LANGUAGE="JavaScript">
 <!--
 function createXMLHttpRequest(){
  if (window.ActiveXObject){
   xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
  }
  else if (window.XMLHttpRequest) {
   xmlHttp = new XMLHttpRequest();
  }
  return xmlHttp;
 }
 function update()
 {
  request = false;
  try{
   request = new XMLHttpRequest();
  }catch (trymicrosoft){
   try{
    request = new ActiveXObject("Msxml2.XMLHTTP");
   }catch (othermicrosoft){
    try{
     request = new ActiveXObject("Microsoft.XMLHTTP");
    }catch (failed){
     request = false;
    }
   }
  }
  request=createXMLHttpRequest();
  if (!request){
   alert("Error initializing XMLHttpRequest!");
   return;
  }
  request.onreadystatechange=handleResponse;
  request.open("GET","./rss.xml",true);
  request.send(null);
 }
 function handleResponse() {
  if(request.readyState == 4){
   if(request.status == 200){
    var doc = request.responseXML;//.documentElement
    var resp = document.getElementById("resp");
    var info="";
    noteTemp=doc.getElementsByTagName("channel");
    if(noteTemp.length>0)
    node=noteTemp[0].getElementsByTagName("title");//getAttribute
    if(node.length>0)
    info+="标题:"+node[0].firstChild.nodeValue+"<BR>";
    node=noteTemp[0].getElementsByTagName("link");
    if(node.length>0)
    info+="链接:"+node[0].firstChild.nodeValue+"<BR>";
    node=noteTemp[0].getElementsByTagName("description");
    if(node.length>0)
    info+="描述:"+node[0].firstChild.nodeValue+"<BR>";
    node=noteTemp[0].getElementsByTagName("pubDate");
    if(node.length>0)
    info+="发布时间:"+node[0].firstChild.nodeValue+"<BR>";
    node=noteTemp[0].getElementsByTagName("language");
    if(node.length>0)
    info+="语言:"+node[0].firstChild.nodeValue+"<BR>";
    node=noteTemp[0].getElementsByTagName("image");
    node=node[0].getElementsByTagName("url");;
    if(node.length>0)
    info+="Logo:<BR><img src='"+node[0].firstChild.nodeValue+"'><BR>";

    if(noteTemp.length>0)
    noteTemp=noteTemp[0].getElementsByTagName("item");
    info+="消息数量:"+noteTemp.length+"<BR>";
    info+="<table width=100%>";
    for(i=0;i<noteTemp.length;i++)
    {
     title=noteTemp[i].getElementsByTagName("title")[0].firstChild.nodeValue;
     link=noteTemp[i].getElementsByTagName("link")[0].firstChild.nodeValue;
     pubDate=noteTemp[i].getElementsByTagName("pubDate")[0].firstChild.nodeValue;
     description=noteTemp[i].getElementsByTagName("description")[0].firstChild.nodeValue;
     info+="<tr><td><a href=/""+link+"/" target=/"_blank/" title='"+description+"'>"+title+" ["+pubDate+"]</a></td></tr>";
    }
    info+="</table>";
    resp.innerHTML=info;
   }
  }
 }

  //-->
  </SCRIPT>
 </HEAD>

 <BODY>
  <div id="resp" width=100% height=400>Loading....</div>
 </BODY>
</HTML>
<SCRIPT LANGUAGE="JavaScript">
<!--
 update();
//-->
</SCRIPT>

此代码对于标准的rss,可以正常运行,并兼容IE和FireFox。不过有些网站提供的RSS不规范,导致无法正常解析,比如cnBeta的rss,内容看起来正常,但是他的Content-Type错误。对于此类问题,如下的办法可以解决IE的问题,FireFox的问题研究中:
增加如下vbscript函数:
  <SCRIPT LANGUAGE="vbScript">
  <!--
  Function bytes2BSTR(vIn)
 Dim strReturn,i,ThisCharCode,innerCode,Hight8,Low8,NextCharCode
 strReturn=""
 For i=1 To LenB(vIn)
  ThisCharCode=AscB(MidB(vIn,i,1))
  If ThisCharCode<&H80 Then
   strReturn=strReturn & Chr(ThisCharCode)
  Else
   NextCharCode=AscB(MidB(vIn,i+1,1))
   strReturn=strReturn&Chr(CLng(ThisCharCode)*&H100+CInt(NextCharCode))
   i=i+1
  End If
 Next
  bytes2BSTR=strReturn
 End Function
 //-->
  </SCRIPT>
查找代码:
var doc = request.responseXML;
将该代码注释掉,并在下面添加:
doc = new ActiveXObject("Microsoft.XMLDOM");
var xml=bytes2BSTR(request.responseBody);
doc.loadXML(xml);

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
PHP 实例 - AJAX RSS 阅读器
RSS 阅读器用于阅读 RSS Feed。 AJAX RSS 阅读器 在下面的实例中,我们将演示一个 RSS 阅读器,通过它,来自 RSS 的内容在网页不进行刷新的情况下被载入: 实例解释 - HTML 页面 当用户在上面的下拉列表中选择某个 RSS-feed 时,会执行名为 "showRSS()" 的函数。
1111 0
jQuery Ajax 简单的实现跨域请求
jQuery Ajax 简单的实现跨域请求
70 0
jQuery ajax - ajax()方法
jQuery ajax - ajax()方法
46 0
JQuery Ajax 请求格式
JQuery Ajax 请求格式
46 0
jquery Ajax示例
function ShowMsgText() {     $.ajax({     url:"../datas/jsonTest_1.ashx",        type:"post",     success:function(data){//text,responseText...
726 0
jQuery Ajax 实例 全解析 (转)
1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。 url (String) : 请求的HTML页的URL地址。 data (Map) : (可选参数) 发送至服务器的 key/value 数据。
912 0
+关注
pollyduan
专注编码十数年,乐于分享,热衷技术研究,关注开源技术。
156
文章
3
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载