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);

目录
相关文章
|
2月前
|
XML 前端开发 JavaScript
ajax解析
ajax解析
27 0
|
2月前
|
小程序 前端开发
|
8月前
|
XML JSON 前端开发
ajax请求json和xml数据及对json和xml格式数据的解析
ajax请求json和xml数据及对json和xml格式数据的解析
118 0
|
9月前
|
XML 前端开发 JavaScript
详细解析Ajax的使用之向服务器发送GET请求
详细解析Ajax的使用之向服务器发送GET请求 上篇文章讲的如何使用Ajax发送get请求,这篇文章说如何使用Ajax发送post请求。 HTML代码: &lt;h1&gt;ajax的post请求&lt;/h1&gt; &lt;button id=&quot;btn&quot;&gt;发送请求&lt;/button&gt; 1 2 JavaScript代码: var oBtn = document.getElementById(&quot;btn&quot;); // 1.初始化请求对象 var xhr; if (window.XMLHttpRequest) { xhr = new XML
|
9月前
|
JSON 前端开发 JavaScript
详细解析Ajax的使用之向服务器发送GET请求
详细解析Ajax的使用之向服务器发送GET请求 前面一篇博客我们讲到了如何使用form表单像服务器发送请求,但是请求方式是同步的,效率太低,现在我们讲一下如何使用Ajax的技术向服务器发送异步请求。 HTML代码: &lt;h1&gt;ajax的get请求&lt;/h1&gt; &lt;button id=&quot;btn&quot;&gt;获取数据&lt;/button&gt; &lt;p&gt;姓名:&lt;span id=&quot;user&quot;&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;年龄:&lt;span id=&quot;age&quot;&gt;&lt;/span&gt;&lt;/p&gt; 1 2 3 4 JavaScript代码: var oBtn =
|
9月前
|
XML 前端开发 JavaScript
详细解析JavaScript的Ajax之同步和异步的区别
详细解析JavaScript的Ajax之同步异步的区别 博客整理到这里基本上JavaScript的初级知识就整理完了,现在我们来说一下看JavaScript的最后一个知识点——Ajax。 (Asynchronous Javascript And XML) 即异步 JavaScript 和 XML,一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。 1.同步和异步 首先我们先来分析一下JavaScript的中的同步和异步的区别。 同步就是调用某个内容时,调用方得等待这个调用返回结果才能继续往后执行。(期间不可以执行其他的命令)。如图:
详细解析JavaScript的Ajax之同步和异步的区别
|
10月前
|
XML 存储 JSON
JSON&Ajax(语法格式+解析json)
导读模块:发展史: 21世纪初,Douglas Crockford寻找一种简便的数据交换格式, 能够在服务器之间交换数据。当时通用的数据交换语言是XML, 但是Douglas Crockford觉得XML的生成和解析都太麻烦, 所以他提出了一种简化格式,也就是Json。
66 0
|
10月前
|
Web App开发 XML 存储
【AJAX】对于AJAX 解析已经XMLHttpRequest对象对于异步的操作等等在项目中的体验
【AJAX】对于AJAX 解析已经XMLHttpRequest对象对于异步的操作等等在项目中的体验
【AJAX】对于AJAX 解析已经XMLHttpRequest对象对于异步的操作等等在项目中的体验
|
XML Web App开发 JSON
小白来实现一个Ajax请求[Ajax使用方法及相关知识点详细解析——超级全]
写在前面: 本文主要总结整理Ajax使用方法背景知识点的详细解析,以及Ajax跨域的具体使用方式并且对栗子进行了讲解,需要的朋友可以过来参考下,喜欢的可以点波赞,或者关注一下本人,希望通过本文能够作为一个Ajax的查找资料,不懂Ajax?看这篇文章就可以了。 ajax简介: Ajax 的全称是Asynchronous JavaScript and XML,意思是:异步 JavaScript 和 XML Ajax是使用XMLHttpRequest对象与服务器端通信的脚本语言 可以发送及接收各种格式的信息,包括JSON、XML、HTML和文本文件。 AJAX可以无需刷新页面而与服务器端进行通信。
194 0
小白来实现一个Ajax请求[Ajax使用方法及相关知识点详细解析——超级全]
|
前端开发 Java
【AJAX】AJAX技术详细解析以及实例(2)
【AJAX】AJAX技术详细解析以及实例
125 0
【AJAX】AJAX技术详细解析以及实例(2)