PHP ºÍ AJAX Live Search
AJAX ¿ÉΪÓû§Ìṩ¸üÓѺᢽ»»¥ÐÔ¸üÇ¿µÄËÑË÷ÌåÑé¡£
AJAX Live Search
ÔÚÏÂÃæµÄ AJAX Àý×ÓÖУ¬ÎÒÃǽ«ÑÝʾһ¸öʵʱµÄËÑË÷¡£
ʵʱµÄËÑË÷Ó봫ͳËÑË÷Ïà±È£¬¾ßÓкܶàÓÅÊÆ£º
- µ±¼üÈëÊý¾Ýʱ£¬¾Í»áÏÔʾ³öÆ¥ÅäµÄ½á¹û
- µ±¼ÌÐø¼üÈëÊý¾Ýʱ£¬¶Ô½á¹û½øÐйýÂË
- Èç¹û½á¹ûÌ«ÉÙ£¬É¾³ý×Ö·û¾Í¿ÉÒÔ»ñµÃ¸ü¿íµÄ·¶Î§
ÔÚÏÂÃæµÄÎı¾¿òÖÐËÑË÷ W3School µÄÒ³Ãæ
±¾Àý°üÀ¨ËĸöÔªËØ£º
- ¼òµ¥µÄ HTML ±íµ¥
- JavaScript
- PHP Ò³Ãæ
- XML Îĵµ
ÔÚ±¾ÀýÖУ¬½á¹ûÔÚÒ»¸ö XML Îĵµ (links.xml) ÖнøÐвéÕÒ¡£ÎªÁËÈÃÕâ¸öÀý×ÓС¶ø¼òµ¥£¬ÎÒÃÇÖ»Ìṩ 8 ¸ö½á¹û¡£
HTML ±íµ¥
ÕâÊÇ HTML Ò³Ãæ¡£Ëü°üº¬Ò»¸ö¼òµ¥µÄ HTML ±íµ¥£¬Õë¶Ô´Ë±íµ¥µÄ CSS Ñùʽ£¬ÒÔ¼°Ö¸Ïò 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>
Àý×Ó½âÊÍ - HTML ±íµ¥
ÕýÈçÄã¿´µ½µÄ£¬HTML Ò³Ãæ°üº¬Ò»¸ö¼òµ¥µÄ HTML ±íµ¥£¬ÆäÖеÄÎı¾¿òÃûΪ "txt1"¡£
±íµ¥ÊÇÕâÑù¹¤×÷µÄ£º
- µ±Óû§ÔÚÎı¾¿òÖа´¼ü²¢ËÉ¿ª°´¼üʱ£¬»á´¥·¢Ò»¸öʼþ
- µ±Ê¼þ´¥·¢Ê±£¬»áÖ´ÐÐÃûΪ showResult() µÄº¯Êý
- ±íµ¥ÏÂÃæÊÇÃûΪ "livesearch" µÄ <div> ÔªËØ¡£ËüÓÃ×÷ showResult() Ëù·µ»ØÊý¾ÝµÄռλ·û
JavaScript
JavaScript ´úÂë´æ´¢ÔÚÓë HTML ÎĵµÁ¬½ÓµÄ "livesearch.js" ÖУº
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 ("Browser does not support HTTP Request")
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 Óë PHP ºÍ AJAX ÇëÇó ÖеÄÀý×ÓÏàͬ¡£
showResult() º¯Êý
¸Ãº¯Êýÿµ±Ò»¸ö×Ö·ûÊäÈëÎı¾¿ò¾Í»áÖ´ÐÐÒ»´Î¡£
Èç¹ûÎı¾ÓòÖÐûÓÐÊäÈë (str.length == 0)£¬¸Ãº¯Êý°Ñ·µ»Ø×Ö¶ÎÉèÖÃΪ¿Õ£¬²¢É¾³ýÖÜΧµÄÈκα߿ò¡£
²»¹ý£¬Èç¹ûÎı¾ÓòÖдæÔÚÊäÈ룬Ôòº¯ÊýÖ´ÐУº
- ¶¨Òå·¢Ë͵½·þÎñÆ÷µÄ url £¨ÎļþÃû£©
- °Ñ´øÓÐÊäÈë¿òÄÚÈݵIJÎÊý (q) Ìí¼Óµ½ url
- Ìí¼ÓÒ»¸öËæ»úÊý£¬ÒÔ·ÀÖ¹·þÎñÆ÷ʹÓûº´æÎļþ
- µ÷Óà GetXmlHttpObject º¯ÊýÀ´´´½¨ XMLHTTP ¶ÔÏ󣬲¢ÔÚ´¥·¢Ò»¸ö±ä»¯Ê±¸æÖª´Ëº¯ÊýÖ´ÐÐÃûΪ stateChanged µÄÒ»¸öº¯Êý
- ʹÓøø¶¨µÄ url À´´ò¿ª XMLHTTP ¶ÔÏó
- Ïò·þÎñÆ÷·¢ËÍ HTTP ÇëÇó
stateChanged() º¯Êý
ÿµ± XMLHTTP ¶ÔÏóµÄ״̬·¢Éú±ä»¯Ê±£¬¸Ãº¯Êý¾Í»áÖ´ÐС£
µ±×´Ì¬±äΪ 4 (»ò "complete") ʱ£¬¾Í»áʹÓÃÏìÓ¦Îı¾À´Ìî³ä txtHint ռλ·ûµÄÄÚÈÝ£¬²¢ÔÚ·µ»Ø×Ö¶ÎÖÜΧÉèÖÃÒ»¸ö±ß¿ò¡£
PHP Ò³Ãæ
ÓÉ JavaScript ´úÂëµ÷ÓõķþÎñÆ÷Ò³ÃæÊÇÃûΪ "livesearch.php" µÄ PHP Îļþ¡£
"livesearch.php" ÖеĴúÂë¼ì²éÄǸö XML Îĵµ "links.xml"¡£¸ÃÎĵµ w3school.com.cn ÉϵÄÒ»Ð©Ò³ÃæµÄ±êÌâºÍ URL¡£
ÕâЩ´úÂë»áËÑË÷ XML ÎļþÖÐÆ¥ÅäËÑË÷×Ö·û´®µÄ±êÌ⣬²¢ÒÔ HTML ·µ»Ø½á¹û£º
<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("links.xml");
$x=$xmlDoc->getElementsByTagName('link');
//get the q parameter from URL
$q=$_GET["q"];
//lookup all links from the xml file if length of q>0
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)
{
//find a link matching the search text
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>";
}
}
}
}
}
// 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" ռλ·ûµÄÊä³ö