国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

解讀利用PHP JavaScript打造AJAX搜索窗的方法

2024-09-01 08:30:04
字體:
來源:轉載
供稿:網友

一、引言

Web世界中一項廣為使用的功能就是搜索。隨著Web技術的日益發展,為了更好地滿足客戶的需求,常規搜索引擎開始對更多的非常規方式"敞開了大門"。在這方面,Yahoo!率先提供出其Y!Q服務。這個新的服務能夠使你搜索任何web頁面,前提是該頁面的作者必須包括在他們的web頁面中。是服務技術實現了把相關的搜索結果呈現到讀者眼前,從而向讀者展示更多的信息而不必離開他們的當前頁面。

Yahoo!的Y!Q服務的確是一個偉大的想法,但是它的出現也受到了一些批評。原因何在?首先,它要求客戶端必須使用Yahoo!的JavaScript并且你必須添加一個<form/>元素,以便滿足Yahoo!的搜索要求。對于許多網站作者來說,提供該服務要求付出太多的努力。并且,在所有這些條件滿足之后,搜索結果將以Yahoo!風格展現,從而破壞了用戶網站的外觀感覺。

幸運的是,Yahoo!并非唯一的提供"從你的網站提供搜索結果"服務的搜索引擎。MSN Search也提供一種類似服務,除了它能夠使web開發者控制外觀感覺以外。這種能力來自于MSN Search提供它的搜索結果的RSS版本,從而使得訂閱一個特定的搜索或使用Ajax方法把該結果添加到你的頁面成為可能。

盡管Google已經率先實現了這種新的"從你的站點進行搜索"技術;但是,在本文成文之時,與Google相關的Google BlogSearch Beta也已經能夠以RSS或者Atom格式提供返回的結果。

二、 服務器端組件

使用MSN Search執行搜索時,你會看到一個桔黃色的XML圖像出現在結果頁面的底部。點擊這個圖像將會把你帶到一個新的頁面,并提供給你訂閱該搜索的URL。

這樣以來,你就可以編寫服務器端代碼以檢索遠程饋送。對于本文中的搜索窗,你將使用PHP檢索搜索饋送。來自于服務器應用程序請求信息的URL看起來如下所示:

websearch.php?search=[SEARCHTERM]

查詢字符串只有一個變量:"search";因此,應用程序應該查找此查詢項。在服務器端,你需要創建一個頁面來"拉動"這個數據:

以下為引用的內容:

<?php
header("Content-Type: text/xml");
header("Cache-Control: no-cache");if ( isset(_GET["search"]) )
{
 searchTerm = urlencode( stripslashes(_GET["search"]) );
 url = "http://search.msn.com/results.aspx?q=searchTerm&format=rss";
 xml = file_get_contents(url);
 echo xml;
}
?>

前兩行設置要求的頭部以便瀏覽器能夠正確處理數據(XML形式,并且沒有對結果予以緩沖)。下一行代碼使用isset()函數來決定是否搜索鍵存在于查詢字符串中。

為了把一個合適的請求發送到遠程主機,搜索術語應該通過許多函數的"過濾"。首先,它被傳遞給stripslashes()函數。如果在PHP配置中啟動了"magic quotes"(缺省情況下是支持的),那么,到達PHP引擎的任何引號都會被使用一個斜杠(如,"search query")自動地脫掉。該stripslashes()函數負責刪除這些符號,僅留下"search query"。在刪除斜杠后,轉到urlencode()函數,由這個函數負責編碼字符以用于查詢字符串??崭瘛⒁?、"&"等符號都被編碼。

注意 如果搜索術語不能通過這些函數的"過濾",那么,MSN服務器將返回一個代碼400-"Bad Request"。

當為轉換搜索術語準備好后,它被包括到URL中并存儲于url變量中。最后,file_get_contents()函數負責打開遠程文件,讀取其內容并以一個字符串形式把它返回到xml變量中,然后使用echo命令把它打印到頁面中。

三、 客戶端組件

本文中的搜索窗口(Widget)的客戶端代碼基于一個靜態對象msnWebSearch創建-它被定義為一個沒有任何屬性(現在)的對象:

var msnWebSearch ={};

這個對象用于一個HTMLElement的onclick事件中執行搜索:

以下為引用的內容:

<a href="#"
onclick='msnWebSearch.search(event,"Professional Ajax"); return false;'>
Professional Ajax
</a>

這個msnWebSearch對象提供若干取得搜索結果的方法,并負責繪制和放置包含這些數據的HTML。第一個方法是drawResultBox(),它負責繪制HTML。這個方法形成的HTML如下所示:

以下為引用的內容:

<divclass="ajaxWebSearchBox">
 <div class="ajaxWebSearchHeading">MSN Search Results
 <a class="ajaxWebSearchCloseLink" href="#">X</a>
</div>
<div class="ajaxWebSearchResults">
 <a class="ajaxWebSearchLink" target="_new" />
?。糰 class="ajaxWebSearchLink" target="_new" />
</div>
</div>

該結果框分為兩部分:一個頭部和一個結果欄(見圖1)。頭部告訴用戶這個新的搜索窗包含來自一個MSN搜索的結果。它還包含一個"X"用于關閉該小窗口。其結果欄包含塊風格的鏈接,當點擊這些鏈接時將打一個新的窗口。

共6頁上一頁123456下一頁
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平乡县| 彭阳县| 崇阳县| 泽州县| 胶州市| 竹北市| 芜湖县| 龙游县| 安乡县| 和田县| 简阳市| 高雄市| 永济市| 达尔| 名山县| 县级市| 镇宁| 江永县| 沈丘县| 吴桥县| 陆河县| 磴口县| 资中县| 巩留县| 固阳县| 龙岩市| 五原县| 阿克苏市| 临江市| 崇阳县| 阜宁县| 江华| 蓝田县| 宣汉县| 淮阳县| 兴城市| 当涂县| 邵武市| 瑞丽市| 乳源| 大英县|