Tafutaji wa Live wa AJAX wa PHP
- Mchezo wa mpaka wa juu AJAX responseXML
- Mchezo wa mpaka AJAX RSS Reader
AJAX 可为用户提供更友好、交互性更强的搜索体验。
AJAX Live Search
在下面的 AJAX 例子中,我们将演示一个实时的搜索。
实时的搜索与传统搜索相比,具有很多优势:
- 当键入数据时,就会显示出匹配的结果
- 当继续键入数据时,对结果进行过滤
- 如果结果太少,删除字符就可以获得更宽的范围
在下面的文本框中搜索 CodeW3C.com 的页面
本例包括四个元素:
- 简单的 HTML 表单
- JavaScript
- Picha ya 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"; kutumia } xmlHttp=GetXmlHttpObject() kama xmlHttp==null { alert ("Kampuni ya kifungu haitumie matumizi ya HTTP Request") kutumia } 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; ina sababu { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } kutoka (e) { // Internet Explorer ina sababu { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } kutoka (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } kutumia xmlHttp; }
Mafano ya maonyesho:
GetXmlHttpObject na Tafutaji wa AJAX wa PHP ina mifano yoyote
Funguo ya showResult()
Mengineo unafanya kila mara kama inaonekana heri katika eneo la muonekano
Kama eneo la muonekano hauonekani (str.length == 0), mengineo unapata ugeno wa mawazo gani kwa jicho, na kumfuta kina za ukingo zote
Hata hivyo, kama kuna muonekano katika eneo la muonekano, mengineo unafanya:
- Kumekadiri url ya kusaidia kwa kumwambia (mifano)
- Ongeza thamani ya kichwa cha kichaji kwenye url
- Ongeza namba ya kina kumwambia kwa kusikitisha kwamba mtandao haitumie faili ya kachache
- Tumia kikamilika ya GetXmlHttpObject kumueleza kumengeneza kikompyuta cha XMLHTTP, na kumwambia kikompyuta hii kuendeleza kufanya kazi ya stateChanged
- Tumia url inayotumika kuifungua kifaa cha XMLHTTP
- Kutuma mawasiliano ya HTTP kwa mawasiliano ya server
Funguo ya stateChanged()
Kila wakati hali ya kifaa cha XMLHTTP inatangulia, mengineo hii itakafanywa.
Mwaka wa hivi tu kama hali inatangulia 4 (au "complete") itakapotumika maelezo ya kuelewa kufikia kwa kichwaoa txtHint na kumekadiri kifupi cha matokeo kwenye eneo la matokeo.
Picha ya PHP
Makina ya server inayotumika na kipindi cha JavaScript ni faili ya PHP ya kina "livesearch.php".
"livesearch.php" igeukosea kipya cha XML "links.xml" ambao kinahusu kichwa na URL ya wapage wengine kwenye codew3c.com.
Hizi kodi huzamia kusoma maelezo ya kitabu cha XML ambao yaenea kichwa cha utafutaji na kureturna matokeo kwa 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>"; } } } } } //Weka kila mtume kama "no suggestion" ikiwa hakuna tabia zilizojulikana // au kwa maadili sahihi if ($hint == "") { $response="no suggestion"; } else { $response=$hint; } //Kuandaa mtume wa kuelewa echo $response; ?>
Mafano ya maonyesho:
Ikiwa kimekutumia text ya kwanza kutoka JavaScript (strlen($q) > 0), itatokea:
- PHP kina XML DOM kina "links.xml" file
- Gusoma zote "title" zilizotokea (nodetypes = 1), ili kufaa tabia za data zilizisikia na JavaScript
- Tumia link ambao ina title sahihi, na wakilisha kama $response kiwango. Ikiwa tabia zaidi ya moja zinaongezwa kwa kiwango kila moja
- Ikiwa hakuna tabia, kumekua $response kiwango "no suggestion"
- $result ni muatili wa kuwa "livesearch" placeholder
- Mchezo wa mpaka wa juu AJAX responseXML
- Mchezo wa mpaka AJAX RSS Reader