在这里我主要是用了两种方法:
第一种是直接用js来访问,这种方法的优点是简单,但缺点是不能在firefox上使用
第二种是用prototype进行实现,当然对ie和firefox就都能满足了
但不论你是用哪种方法,都会面临一个问题:
由于客户端浏览器的安全设置问题,从客户端JavaScript脚本中用XMLHttpRequest直接访问第三方的网址是被禁止的。
最简单的方法就是在自己的服务器上添加一个代理,客户端脚本先把请求发送给代理,代理转发请求,把响应发回给客户端脚本。
所以,我们先在自己的服务器上添加一个代理
/**
*
*/
package com.sech.web.servlet;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
/**
*
* <p>
* Copyright: Copyright (c) 2009
* </p>
*
* @author sech
*
* @version 1.0
*/
public class RssRead extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 4431127246599359389L;
private static int READ_BUFFER_SIZE = 1024;
/**
*
*/
public RssRead() {
// TODO Auto-generated constructor stub
}
public void init() throws ServletException {
}
// Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String urlString = request.getParameter("url");
writeResponse(response, urlString);
}
private void writeResponse(HttpServletResponse response, String urlString)
throws ServletException {
try {
URL url = new URL(urlString);
URLConnection urlConnection = url.openConnection();
response.setContentType(urlConnection.getContentType());
InputStream ins = urlConnection.getInputStream();
OutputStream outs = response.getOutputStream();
byte[] buffer = new byte[READ_BUFFER_SIZE];
int bytesRead = 0;
while ((bytesRead = ins.read(buffer, 0, READ_BUFFER_SIZE)) != -1) {
outs.write(buffer, 0, bytesRead);
}
outs.flush();
outs.close();
ins.close();
} catch (Exception e) {
try {
response.sendError(
HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e
.getMessage());
} catch (IOException ioe) {
throw new ServletException(ioe);
}
}
}
// Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
// Clean up resources
public void destroy() {
}
}
然后再在web.xml中配置下:
<servlet>
<servlet-name>rssread</servlet-name>
<servlet-class>com.sech.web.servlet.RssRead</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>rssread</servlet-name>
<url-pattern>/rssread</url-pattern>
</servlet-mapping>
这样我们就可以直接访问:http://localhost/rssread 了
既然已经建立了服务器代理,那下面我们就进行js的编写.
第一种:
function get_news(servername)
{
var URL,i;
var s_wz,e_wz,str,htmlText;
htmlText = "";
URL = servername+"rssread?url=http://news.sohu.com/rss/shehui.xml";
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load(URL);
nodes = xmlDoc.documentElement.childNodes;
var ItemN = xmlDoc.getElementsByTagName("item");
for(i=0;i<7;i++)
{
TextTitle = ItemN[i].selectSingleNode("title").text;//获取title内容
TextLink = ItemN[i].selectSingleNode("link").text;//获取link内容
//Textdescription = ItemN[0].selectSingleNode("description").text;
//s_wz = Textdescription.indexOf("src='");
//e_wz = Textdescription.indexOf("'",s_wz+5);
//Imgurl = Textdescription.slice(s_wz+5,e_wz);
htmlText = htmlText + "<LI><a href='"+TextLink+"' target=_blank>"+TextTitle+"</a></LI>"
}
return htmlText;
}
html的调用:
<DIV class=textDiv id="news">
<UL>
<script language="JavaScript">
document.writeln(sendRequest('http://localhost/'))
</script>
</UL>
</DIV>
第二种方法:
var SendRequestAjax = Class.create();
SendRequestAjax.prototype ={
initialize: function(servername) {
this.servername = servername;
},
sendRequest:function(){
var url =this.servername+"rssread?url=http://news.sohu.com/rss/shehui.xml";
var pars = "";
var myAjax = new Ajax.Request(url, {method: 'get', parameters: pars, onComplete: this.sendRequestCompleted.bind(this)});
},
sendRequestCompleted:function(res){
var results= res.responseXML;
var title = null;
var item = null;
var link = null;
var htmlText="";
var items = results.getElementsByTagName("item");
for(var i = 0; i < 7; i++) {
item = items[i];
link=items[i].getElementsByTagName("link")[0].firstChild.nodeValue;
title = items[i].getElementsByTagName("title")[0].firstChild.nodeValue;
htmlText = htmlText + "<LI><a href='"+link+"' target=_blank>"+title+"</a></LI>"
}
$("news").innerHTML="<UL>"+htmlText+"</UL>";
}
};
function sendRequest(servername) {
var oSendRequestAjax = new SendRequestAjax(servername);
oSendRequestAjax.sendRequest();
}
html代码:
<script type="text/javascript" src="js/prototype.js"></script>
<DIV class=textDiv id="news">
<script language="JavaScript">
(sendRequest('http://localhost/'))
</script>
</DIV>
OK.这样两种方法就都搞定了.
分享到:
相关推荐
在本文中,我们将深入探讨如何使用PHP和AJAX异步读取RSS文档数据。RSS(Really Simple Syndication)是一种广泛使用的XML格式,用于简洁、快速地发布和同步网站内容。通过这种方式,用户无需直接访问网站就能获取...
这两种格式都是用于订阅和分发网络内容的标准化方式。RSS是一种较早且广泛使用的格式,而Atom则是RSS的一个替代品,提供了更现代和规范化的结构。RSS和Atom提要通常用于博客、新闻站点和播客,让读者可以订阅并获取...
3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从word中粘贴...
Java和XML是IT行业中两种非常重要的技术,它们在构建RSS阅读器中发挥着核心作用。RSS(Really Simple Syndication)是一种用于发布和订阅新闻、博客文章等在线内容的格式,而Java作为一门广泛使用的编程语言,可以...
标题“用ajax实现读博客rss示例代码”中涉及到的知识点包括ajax技术、RSS(Really Simple Syndication,即简易信息聚合)以及RSS的读取方式。描述中提到这是一份介绍如何使用ajax技术实现读取博客RSS的具体示例代码...
RSS(Really Simple Syndication)是一种内容发布格式,允许用户订阅并获取网站更新,无需直接访问每个网站。此程序可能是一个完整的网站解决方案,用于搭建一个能够自动抓取、解析和展示RSS源的平台。 描述中的...
3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从...
通过分析和学习这个Asp.Net+Ajax的RSS阅读器源码,开发者不仅能了解这两种技术的基本应用,还能深入掌握Web应用的架构设计、数据交互以及用户体验提升的方法。这对于想要在Web开发领域深化技能的初学者来说,无疑是...
标题 "zerodhaFeeds2" 提供了一个关于Android应用程序的信息,它专注于读取特定的RSS(Really Simple Syndication)feed。RSS是一种用于发布和聚合新闻、博客和其他在线内容的标准格式。这个应用由React Native构建...
每个订阅都可以设置为两种模式: 查询模式-每个查询匹配元素都会触发通知; 阅读模式-每个新元素都会收到通知。 用法 假设您已安装Node(和npm),请部署实例: 克隆此仓库, git clone ...
3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从word中...
3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及"从word中...
3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及'从word中粘贴...
我们通过三个任务:读取 RSS 地址、获取 RSS 内容、保存 RSS 内容到文件来展示两种不同的异步编程方法。 首先,传统的回调方式实现这三个任务是逐个顺序嵌套的,例如在第一个任务完成后调用第二个任务,然后在第二...
/rss.js JavaScript脚本文件 第25章(/ch25) 程序描述:本章将仿照Google Suggest,使用Ajax技术实现动态获取搜索提示的功能。当输入搜索关键字时,自动向服务器发送请求,查询相关的关键字,并及时提示...
解析XML文档有两种主要方法:DOM(Document Object Model)和SAX(Simple API for XML)。DOM将整个XML文档加载到内存中,形成一个树状结构,允许开发者随机访问任何部分。SAX是一种事件驱动的解析方式,它逐行读取...
2. 读取RSS订阅列表:`readRSSFile`函数读取并解析配置文件,随机选择一个订阅源。 3. 获取RSS数据:`downloadRSSFeed`函数向随机选择的预定源发送HTTP请求,获取数据。 4. 解析RSS数据:`parseRSSFeed`函数将RSS...
3、框架(iframe)和JS两种调用新闻和图片新闻,以及图片新闻的自定义横排和竖排。 4、强大的后台文章编辑器的功能。可方便地用拖动的方式进行图文混排、图片远程上传、上传图片显示效果处理等操作,以及'从word中粘贴...
第1章 一种新的Web设计方法 1.1 为什么需要Ajax富客户端? 1.1.1 比较用户体验 1.1.2 网络延迟 1.1.3 异步交互 1.1.4 独占或瞬态的使用模式 1.1.5 忘掉Web 1.2 Aiax的四个基本原则 1.2.1 浏览器中的是应用而不是内容 ...