PHP 示例 - AJAX 即時搜尋
AJAX 可用於建立更使用者友好且互動性更強的搜尋。
AJAX 即時搜尋
下面的示例將演示一個即時搜尋,您可以在鍵入時獲取搜尋結果。
與傳統搜尋相比,即時搜尋有許多優點
- 鍵入時顯示結果
- 繼續鍵入時結果會縮小
- 如果結果過於狹窄,請刪除字元以檢視更廣泛的結果
在下面的輸入欄位中搜索 W3Schools 頁面
上面示例中的結果來自一個 XML 檔案(links.xml)。為了使此示例簡單明瞭,只有六個結果可用。
示例說明 - HTML 頁面
當用戶在上面的輸入欄位中鍵入字元時,將執行 "showResult()" 函式。該函式由 "onkeyup" 事件觸發
<html>
<head>
<script>
function showResult(str) {
if (str.length==0) {
document.getElementById("livesearch").innerHTML="";
document.getElementById("livesearch").style.border="0px";
return;
}
var xmlhttp=new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (this.readyState==4 && this.status==200) {
document.getElementById("livesearch").innerHTML=this.responseText;
document.getElementById("livesearch").style.border="1px solid #A5ACB2";
}
}
xmlhttp.open("GET","livesearch.php?q="+str,true);
xmlhttp.send();
}
</script>
</head>
<body>
<form>
<input type="text" size="30" onkeyup="showResult(this.value)">
<div id="livesearch"></div>
</form>
</body>
</html>
原始碼解釋
如果輸入欄位為空(str.length==0),則函式清除 livesearch 佔位符的內容並退出函式。
如果輸入欄位不為空,則 showResult() 函式執行以下操作
- 建立一個 XMLHttpRequest 物件
- 建立伺服器響應準備好時要執行的函式
- 將請求傳送到伺服器上的檔案
- 請注意,引數 (q) 已新增到 URL(包含輸入欄位的內容)
PHP 檔案
由上面的 JavaScript 呼叫的伺服器上的頁面是名為 "livesearch.php" 的 PHP 檔案。
“livesearch.php”中的原始碼會在 XML 檔案中搜索與搜尋字串匹配的標題,並返回結果
<?php
$xmlDoc=new DOMDocument();
$xmlDoc->load("links.xml");
$x=$xmlDoc->getElementsByTagName('link');
//從 URL 獲取 q 引數
$q=$_GET["q"];
//如果 q 的長度大於 0,則查詢 xml 檔案中的所有連結
if (strlen($q)>0) {
$hint="";
for($i=0; $i<($x->length); $i++) {
$y=$x->item($i)->getElementsByTagName('title');
$z=$x->item($i)->getElementsByTagName('url');
if ($y->item(0)->nodeType==1) {
//查詢匹配搜尋文字的連結
if (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) {
if ($hint=="") {
$hint="<a href='" .
$z->item(0)->childNodes->item(0)->nodeValue .
"' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
} else {
$hint=$hint . "<br /><a href='" .
$z->item(0)->childNodes->item(0)->nodeValue .
"' target='_blank'>" .
$y->item(0)->childNodes->item(0)->nodeValue . "</a>";
}
}
}
}
}
//如果找不到提示,則將輸出設定為“無建議”
//或正確的值
if ($hint=="") {
$response="no suggestion";
} else {
$response=$hint;
}
//輸出響應
echo $response;
?>
如果 JavaScript 傳送了任何文字(strlen($q) > 0),則會發生以下情況
- 將 XML 檔案載入到新的 XML DOM 物件中
- 迴圈遍歷所有
元素,以查詢與從 JavaScript 傳送的文字匹配的內容 - 將正確的 URL 和標題設定為 "$response" 變數。如果找到多個匹配項,所有匹配項都將新增到該變數中
- 如果沒有找到匹配項,則 $response 變數設定為 "no suggestion"