PHP och AJAX Live Search
- 上一页 AJAX responseXML
- 下一页 AJAX RSS Reader
AJAX kan erbjuda användarna en mer vänlig och interaktiv sökupplevelse.
AJAX Live Search
I detta AJAX-exempel kommer vi att demonstrera en realtids-sökning.
Realtime-sökning har många fördelar jämfört med traditionell sökning:
- När du skriver in data visas matchande resultat
- Resultaten filtreras när du fortsätter att skriva in data
- Om det är för få resultat, kan du ta bort tecken för att få ett bredare område
Sök sidor på CodeW3C.com i följande textfält
Detta exempel inkluderar fyra element:
- En enkel HTML-formulär
- JavaScript
- PHP-sida
- XML-dokument
I detta exempel finns resultaten i en XML-dokument (links.xml) för att hitta. För att göra detta exempel enkelt och enkelt, erbjuder vi bara 8 resultat.
HTML-formulär
Detta är en HTML-sida. Den innehåller ett enkelt HTML-formulär, CSS-stilar för detta formulär och en länk till JavaScript:
<html> <head> <script src="livesearch.js"></script> <style type="text/css"> #livesearch { margin:0px; width:194px; } #txt1 { margin:0px; } </style> </head> <body> <form> <input type="text" id="txt1" size="30" onkeyup="showResult(this.value)" <div id="livesearch"></div> </form> </body> </html>
Exempel på förklaring - HTML-formulär
Som du ser innehåller HTML-sidan ett enkelt HTML-formulär med namnet "txt1" på textfältet.
Så fungerar formuläret:
- När användaren trycker på en tangent i textfältet och släpper den, utlöses ett händelse
- När ett händelseutlösande inträffar, körs funktionen showResult()
- Formuläret under innehåller en <div> med namnet "livesearch" som används som placeholder för data som returneras av showResult()
JavaScript
JavaScript-kod lagras i en "livesearch.js" som är kopplad till HTML-dokumentet:
var xmlHttp function showResult(str) { if (str.length==0) { document.getElementById("livesearch"). innerHTML=""; document.getElementById("livesearch"). style.border="0px"; return } xmlHttp=GetXmlHttpObject() if (xmlHttp==null) { alert ("Webbläsaren stöder inte HTTP-förfrågan") return } var url="livesearch.php" url=url+"?q="+str url=url+"&sid="+Math.random() xmlHttp.onreadystatechange=stateChanged xmlHttp.open("GET",url,true) xmlHttp.send(null) } function stateChanged() { if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete") { document.getElementById("livesearch"). innerHTML=xmlHttp.responseText; document.getElementById("livesearch"). style.border="1px solid #A5ACB2"; } } function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } return xmlHttp; }
例子解释:
GetXmlHttpObject och PHP och AJAX-forespurg har samma exempel.
Funktionen showResult()
Funktionen körs varje gång ett tecken matas in i textfältet.
Om det inte finns någon inmatning i textfältet (str.length == 0), sätter funktionen tillbaka returfältet till tomt och tar bort alla omgivande ramar.
Men om det finns inmatning i textfältet, utför funktionen:
- Definiera url som ska skickas till servern (filnamn)
- Lägg till parametern (q) som innehåller inmatningen i url
- Lägg till ett slumpmässigt nummer för att förhindra att servern använder en cachefil
- Använd funktionen GetXmlHttpObject för att skapa ett XMLHTTP-objekt och informera denna funktion att köra en funktion vid en förändring som kallas stateChanged
- Öppna XMLHTTP-objektet med given url
- Skicka HTTP-forespårgan till servern
stateChanged()-funktionen
Denna funktion körs varje gång XMLHTTP-objektets status ändras.
När statusen blir 4 (eller "complete") fylls innehållet i txtHint-placeholdern med responsen och en ram sätts runt återväxlingen.
PHP-sida
Servernsida som anropas av JavaScript-koden är PHP-filen med namnet "livesearch.php".
"livesearch.php"-koden kontrollerar den XML-dokument "links.xml" som innehåller titlar och URL:er för några sidor på codew3c.com.
Dessa koder söker efter titlar som matchar söksträngen i XML-filen och returnerar resultat i HTML:
<?php $xmlDoc = new DOMDocument(); $xmlDoc->load("links.xml"); $x=$xmlDoc->getElementsByTagName('link'); //hämta q-parametern från URL $q=$_GET["q"]; //sök alla länkar från xml-filen om längden på q>0 om (strlen($q) > 0) { $hint=""; för($i=0; $i<($x->length); $i++) { $y=$x->item($i)->getElementsByTagName('title'); $z=$x->item($i)->getElementsByTagName('url'); om ($y->item(0)->nodeType==1) { //finna en länk som matchar söktexten om (stristr($y->item(0)->childNodes->item(0)->nodeValue,$q)) { om ($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>"; } } } } } // Set output to "no suggestion" if no hint were found // or to the correct values if ($hint == "") { $response="no suggestion"; } else { $response=$hint; } //output the response echo $response; ?>
例子解释:
如果从 JavaScript 送来了任何文本 (strlen($q) > 0),会发生:
- PHP 创建 "links.xml" 文件的一个 XML DOM 对象
- 遍历所有 "title" 元素 (nodetypes = 1),以便找到匹配 JavaScript 所传数据的 name
- 找到包含正确 title 的 link,并设置为 "$response" 变量。如果找到多于一个匹配,所有的匹配都会添加到变量
- 如果没有找到匹配,则把 $response 变量设置为 "no suggestion"
- $result 是送往 "livesearch" 占位符的输出
- 上一页 AJAX responseXML
- 下一页 AJAX RSS Reader