資源描述:
《如何使用ajax創(chuàng)建rss閱讀器》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、如何使用Ajax構(gòu)建RSS閱讀器學(xué)習(xí)如何構(gòu)建Ajax(AsynchronousJavaScriptandXML)RSS(ReallySimpleSyndication)閱讀器,以及一個(gè)可放在任意Web站點(diǎn)上的Web組件,以查看RSS提要(RSSfeed)中的文章。在我讀到有關(guān)從Web頁面的JavaScript代碼請(qǐng)求XML(ExtensibleMarkupLanguage)的內(nèi)容時(shí),我想到的第一件事就是獲得一些RSS并加以顯示。但我立刻就遇到了XMLHypertextTransferProtocoKHTTP)的安全性問題,w
2、ww.mysite.com中的頁面無法尋址www.mysite.com以外的頁面。我打算在該頁面中構(gòu)建一個(gè)通用RSS閱讀器的計(jì)劃落空了。而Web2.0所主張的止是靈活巧妙,通過XMLHTTP解決如何創(chuàng)建RSS閱讀器這一問題的過程將讓我們學(xué)到很多關(guān)于Web2.0編程的知識(shí)。本文詳細(xì)介紹了基于Ajax的RSS閱讀器的構(gòu)造方法,我們使用XMLHTTP和vscript>標(biāo)記作為傳輸機(jī)制。構(gòu)建服務(wù)器端本文清單中所給出的代碼并非構(gòu)建RSS閱讀器的完整代碼。如紺獲得完整代碼,請(qǐng)參見下載部分。這一綜合體的服務(wù)器端分為兩部分。第一部分是數(shù)據(jù)庫
3、,第二部分是一組PHP頁而,這些頁面允許您添加提要、請(qǐng)求提要列表、獲取與特定提要相關(guān)聯(lián)的文章。首先介紹數(shù)據(jù)庫。本文使用MySQL數(shù)據(jù)庫。清單1展示了數(shù)據(jù)庫模式。清單1.數(shù)據(jù)庫模式CREATETABLErss_feeds(rss_feed_idMEDIUMINTNOTNULLAUTOJNCREMEN7;urlTEXTNOTNULL,nameTEXTNOTNULL,last_updateTIMESTAMP,PRIMARYKEY(rss_feed」d));CREATETABLErss_articles(rss_feed」dMEDI
4、UMINTNOTNULL,linkTEXTNOTNULL,titleTEXTNOTNULL,descriptionTEXTNOTNULL);共有兩個(gè)表。rss_feeds表包含提要列表。rss_articles表包含與各提要相關(guān)聯(lián)的文章列表。系統(tǒng)更新文章吋,將刪除當(dāng)前與給定rss.feed.id相關(guān)聯(lián)的所有文章,然后以新文章集刷新該表。數(shù)據(jù)庫包裝器下一步,使用為應(yīng)用程序構(gòu)建邏輯的PHP類集打包數(shù)據(jù)庫。從用于管理數(shù)據(jù)庫連接的Databaseconnection單元素著手,參見清單2。清單2.rss_db.php中的Databa
5、seconnection單元素
6、host/rss';$this->_handle=&DB::Connect($dsn,array());}publicfunctionhandled{return$this->_handle;}}這是一個(gè)標(biāo)準(zhǔn)的PHP單元素模式。它連接到數(shù)據(jù)庫,并通過handle方法返回一個(gè)句柄。這段代碼中另一個(gè)有趣的部分就是兩條require.once語句。第一-條引用連接到數(shù)據(jù)庫的PHPExtensionandApplicationRepository(PEAR)DB模塊。第二條引用解析RSS提要的XML.RSS模塊。我得承認(rèn),之所以在這
7、里使用這些模塊,是因?yàn)槲覍?shí)在懶得去費(fèi)心考慮所有各種形式的RSS的解析問題。如果您未安裝這些模塊,可通過命令行安裝:%pearinstallDB以及:%pearinstallXML_RSSDB模塊通常都是安裝好的,但XML.RSS模塊沒有安裝好。下一步是構(gòu)建一個(gè)用于打包提要列表的類,以使您能夠添加提要、獲取提要列表,等等。清單3展示了此類。清單3.rss_db.php中的FeedList類classFeedList{publicstaticfunctionadd($url){if(FeedList::getFeedByUrl(
8、$url)!=null)return;$db=DatabaseConnection::get()?>handle();$rss=&newXML_RSS($url);$rss->parse();$info=$rss->getChannellnfo();$isth=$db->prepare("