Javascript Ajax異步讀取RSS文檔具體實(shí)現(xiàn)
RSS 是一種基于 XML的文件標(biāo)準(zhǔn),通過(guò)符合 RSS 規(guī)范的 XML文件可以簡(jiǎn)單實(shí)現(xiàn)網(wǎng)站之間的內(nèi)容共享。Ajax 是Asynchronous JavaScript and XML的縮寫(xiě)。通過(guò) Ajax 技術(shù)可以經(jīng)由超文本傳輸協(xié)議(Http) 向一個(gè)服務(wù)器發(fā)出請(qǐng)求并且在等待該響應(yīng)時(shí)繼續(xù)處理另外的數(shù)據(jù)。通過(guò) Ajax 技術(shù)可以很容易實(shí)現(xiàn)讀取遠(yuǎn)程 XML文件,因此,可以使用 Ajax技術(shù)實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)依據(jù) RSS 標(biāo)準(zhǔn)生成的摘要信息,甚至我們可以自己寫(xiě)一個(gè) RSS 閱讀器。
Ajax 并不是一門(mén)新的語(yǔ)言或技術(shù), 它實(shí)際上是幾項(xiàng)技術(shù)按一定的方式組合在一起。共同在協(xié)作中發(fā)揮各自的作用, 它包括:使用XHTML 和CSS 標(biāo)準(zhǔn)化呈現(xiàn); 使用DOM 實(shí)現(xiàn)動(dòng)態(tài)顯示和交互; 使用XML 和XSLT 進(jìn)行數(shù)據(jù)交換與處理; 使用XMLHttpRequest進(jìn)行異步數(shù)據(jù)讀取; 最后用 JavaScript 綁定和處理所有數(shù)據(jù)。好了,對(duì)于理論就不在多說(shuō)了,下面我們直接看代碼吧。
創(chuàng)建XMLHttpRequest對(duì)象并將請(qǐng)求發(fā)送到服務(wù)器:
function createXHR(url){
if(window.XMLHttpRequest){
xmlHttp = new XMLHttpRequest();
}else{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlHttp.open("post",url,"false");
xmlHttp.onreadystatechange = getResponse; xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlHttp.send(null);
}
通過(guò)DOM操作對(duì)Rss文檔進(jìn)行遍歷,得到需要的值:
function readDoc(doc){
root = doc.getElementsByTagName("channel")[0];
docTitle = root.getElementsByTagName("title")[0];
docLink = root.getElementsByTagName("link")[0];
docDescription = root.getElementsByTagName("description")[0];
items = root.getElementsByTagName("item");
for(var i=0;i<items.length;i++){
itemTitle = items[i].getElementsByTagName("title")[0];
itemLink = items[i].getElementsByTagName("link")[0];
itemDescription = items[i].getElementsByTagName("description")[0];
//itemPubDate = items[i].getElementsByTagName("pubDate")[0];
document.getElementById("rssTitle").innerHTML = docTitle.firstChild.nodeValue;
temp = "</h1><h2><a href=""+itemLink.firstChild.nodeValue+"" target="_blank">"+itemTitle.firstChild.nodeValue+"</a></h2>"+"<p>"+itemDescription.firstChild.nodeValue+"</p><hr/>";
document.getElementById("readRss").style.display = "none";
document.getElementById("printRss").getElementsByTagName("span")[0].style.display = "none";
document.getElementById("printRss").innerHTML = document.getElementById("printRss").innerHTML + temp;
}
}
調(diào)用createXHR(url)函數(shù),傳入?yún)?shù),向服務(wù)器發(fā)送求:
createXHR("http://www.apple.com.cn/hotnews/rss/hotnews.rss");
得到響應(yīng):
function getResponse(){
if(xmlHttp.readyState == 4){
if(xmlHttp.status == 200){
rssDoc = xmlHttp.responseXML;
readDoc(rssDoc);//調(diào)用readDoc()函數(shù)
}else{
document.getElementById("rssTitle").innerHTML = "讀取異常!";
//alert(xmlHttp.status);
}
}
}
相關(guān)文章
JavaScript顯示表單內(nèi)元素?cái)?shù)量的方法
這篇文章主要介紹了JavaScript顯示表單內(nèi)元素?cái)?shù)量的方法,涉及javascript操作表單屬性的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
TypeScript接口interface的高級(jí)用法詳解
interface 是typescript核心內(nèi)容,用來(lái)定義規(guī)范,無(wú)論是函數(shù),數(shù)組或者對(duì)象,還是類都可以用接口interface來(lái)進(jìn)行規(guī)范,而接口本身也是可以繼承和擴(kuò)展的,本文給大家詳細(xì)介紹了TypeScript interface的高級(jí)用法,需要的朋友可以參考下2025-03-03
JavaScript學(xué)習(xí)小結(jié)之被嫌棄的eval函數(shù)和with語(yǔ)句實(shí)例詳解
這篇文章主要介紹了JavaScript學(xué)習(xí)小結(jié)之被嫌棄的eval和with實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2016-08-08
原生JavaScript實(shí)現(xiàn)購(gòu)物車(chē)效果
這篇文章主要為大家詳細(xì)介紹了原生JavaScript實(shí)現(xiàn)購(gòu)物車(chē)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
用原生 JS 實(shí)現(xiàn) innerHTML 功能實(shí)例詳解
這篇文章主要介紹了用原生 JS 實(shí)現(xiàn) innerHTML 功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04
JavaScript實(shí)現(xiàn)跑馬燈抽獎(jiǎng)活動(dòng)實(shí)例代碼解析與優(yōu)化(二)
這篇文章主要介紹了JavaScript實(shí)現(xiàn)跑馬燈抽獎(jiǎng)活動(dòng)實(shí)例代碼解析與優(yōu)化(二)的相關(guān)資料,需要的朋友可以參考下2016-02-02
當(dāng)鼠標(biāo)移出灰色區(qū)域時(shí)候,菜單項(xiàng)怎么隱藏起來(lái)
當(dāng)鼠標(biāo)移出灰色區(qū)域時(shí)候,菜單項(xiàng)怎么隱藏起來(lái)...2007-11-11
解決webpack dev-server不能匹配post請(qǐng)求的問(wèn)題
這篇文章主要介紹了解決webpack不能匹配post請(qǐng)求的問(wèn)題,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08

