AJAX 可为用户提供更友好、交互性更强的搜索体验。


AJAX Live Search

在下面的实例中,我们将演示一个实时的搜索,在您键入数据的同时即可得到搜索结果。

实时的搜索与传统的搜索相比,具有很多优势:

  • 当键入数据时,就会显示出匹配的结果

  • 当继续键入数据时,对结果进行过滤

  • 如果结果太少,删除字符就可以获得更宽的范围

在下面的文本框中输入 "HTML",搜索包含 HTML 的页面:

上面实例中的结果在一个 XML 文件(links.xml)中进行查找。为了让这个例子小而简单,我们只提供 6 个结果。


实例解释 - HTML 页面

当用户在上面的输入框中键入字符时,会执行 "showResult()" 函数。该函数由 "onkeyup" 事件触发:

   

源代码解释:

如果输入框是空的(str.length==0),该函数会清空 livesearch 占位符的内容,并退出该函数。

如果输入框不是空的,那么 showResult() 会执行以下步骤:

  • 创建 XMLHttpRequest 对象

  • 创建在服务器响应就绪时执行的函数

  • 向服务器上的文件发送请求

  • 请注意添加到 URL 末端的参数(q)(包含输入框的内容)


PHP 文件

上面这段通过 JavaScript 调用的服务器页面是名为 "livesearch.php" 的 PHP 文件。

"livesearch.php" 中的源代码会搜索 XML 文件中匹配搜索字符串的标题,并返回结果:

load("links.xml"); $x=$xmlDoc->getElementsByTagName('link'); // 从 URL 中获取参数 q 的值 $q=$_GET["q"]; // 如果 q 参数存在则从 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="" . $y->item(0)->childNodes->item(0)->nodeValue . ""; } else { $hint=$hint . "
" . $y->item(0)->childNodes->item(0)->nodeValue . ""; } } } } } // 如果没找到则返回 "no suggestion" if ($hint=="") { $response="no suggestion"; } else { $response=$hint; } // 输出结果 echo $response; ?>

如果 JavaScript 发送了任何文本(即 strlen($q) > 0),则会发生:

  • 加载 XML 文件到新的 XML DOM 对象

  • 遍历所有的 元素,以便找到匹配 JavaScript 所传文本</p></li> <li><p>在 "$response" 变量中设置正确的 URL 和标题。如果找到多于一个匹配,所有的匹配都会添加到变量。</p></li> <li><p>如果没有找到匹配,则把 $response 变量设置为 "no suggestion"。</p></li> </ul> <p><strong>相关视频教程推荐</strong>:《<a href="//m.sbmmt.com/course/list/25.html" target="_blank">AJAX教程</a>》<a href="//m.sbmmt.com/course/list/25.html" _src="//m.sbmmt.com/course/list/25.html">//m.sbmmt.com/course/list/25.html</a></p> </div> </div> </div> <div class="previous-next-links"> <div class="previous-design-link"> ← <a href="//m.sbmmt.com/de/php/php-ajax-xml.html" rel="prev">AJAX XML</a> </div> <div class="next-design-link"> <a href="//m.sbmmt.com/php/php-ajax-rss-reader.html" rel="next">AJAX RSS Reader</a>→ </div> </div> </article> <div class="right-item phpcn-col-md2"> <ul> <li><h3>Tutorial-Navigation</h3> <dl class="navigation"> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" target="_blank" title="大前端">大前端</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="HTML">HTML</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="CSS">CSS</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="HTML5">HTML5</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="CSS3">CSS3</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="JavaScript">JavaScript</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="jQuery">jQuery</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="Vue.js">Vue.js</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="React">React</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="AngularJS">AngularJS</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="Node.js">Node.js</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="AJAX">AJAX</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="Bootstrap">Bootstrap</a> <a href="//m.sbmmt.com/de/course/list/1/type/3.html" title="Foundation">Foundation</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/2/type/3.html" target="_blank" title="JavaScript">JavaScript</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/2/type/3.html" title="Highcharts">Highcharts</a> <a href="//m.sbmmt.com/de/course/list/2/type/3.html" title="Maps API">Maps API</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" target="_blank" title="后端开发">后端开发</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="PHP">PHP</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="ThinkPHP">ThinkPHP</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Laravel">Laravel</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Python">Python</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Go">Go</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Java">Java</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="C">C</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="C++">C++</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="C#">C#</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="JSP">JSP</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Django">Django</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="ASP.NET">ASP.NET</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="ASP">ASP</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="XML">XML</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Ruby">Ruby</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Python3">Python3</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Perl">Perl</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Servlet">Servlet</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Lua">Lua</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="Scala">Scala</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="AppML">AppML</a> <a href="//m.sbmmt.com/de/course/list/3/type/3.html" title="VBScript">VBScript</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/4/type/3.html" target="_blank" title="数据库">数据库</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/4/type/3.html" title="MySQL">MySQL</a> <a href="//m.sbmmt.com/de/course/list/4/type/3.html" title="Redis">Redis</a> <a href="//m.sbmmt.com/de/course/list/4/type/3.html" title="Oracle">Oracle</a> <a href="//m.sbmmt.com/de/course/list/4/type/3.html" title="MongoDB">MongoDB</a> <a href="//m.sbmmt.com/de/course/list/4/type/3.html" title="Memcached">Memcached</a> <a href="//m.sbmmt.com/de/course/list/4/type/3.html" title="SQL Server">SQL Server</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" target="_blank" title="移动端">移动端</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" title="小程序">小程序</a> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" title="uni-app">uni-app</a> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" title="Flutter">Flutter</a> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" title="Android">Android</a> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" title="iOS">iOS</a> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" title="Swift">Swift</a> <a href="//m.sbmmt.com/de/course/list/5/type/3.html" title="其它">其它</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/9/type/3.html" target="_blank" title="运维开发">运维开发</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/9/type/3.html" title="Linux">Linux</a> <a href="//m.sbmmt.com/de/course/list/9/type/3.html" title="Docker">Docker</a> <a href="//m.sbmmt.com/de/course/list/9/type/3.html" title="PhpStudy">PhpStudy</a> <a href="//m.sbmmt.com/de/course/list/9/type/3.html" title="Git">Git</a> <a href="//m.sbmmt.com/de/course/list/9/type/3.html" title="其它工具">其它工具</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/7/type/3.html" target="_blank" title="UI设计">UI设计</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/7/type/3.html" title="Axure">Axure</a> <a href="//m.sbmmt.com/de/course/list/7/type/3.html" title="MVC">MVC</a> <a href="//m.sbmmt.com/de/course/list/7/type/3.html" title="Web Forms">Web Forms</a> <a href="//m.sbmmt.com/de/course/list/7/type/3.html" title="PS">PS</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" target="_blank" title="计算机基础">计算机基础</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="设计模式">设计模式</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="正则表达式">正则表达式</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="HTTP">HTTP</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="网站建设指南">网站建设指南</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="浏览器信息">浏览器信息</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="网站主机">网站主机</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="TCP/IP">TCP/IP</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="W3C">W3C</a> <a href="//m.sbmmt.com/de/course/list/10/type/3.html" title="CodeBasic">CodeBasic</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" target="_blank" title="XML">XML</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="DTD">DTD</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XML DOM">XML DOM</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XSLT">XSLT</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XPath">XPath</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XQuery">XQuery</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XLink">XLink</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XPointer">XPointer</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XML Schema">XML Schema</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="XSL-FO">XSL-FO</a> <a href="//m.sbmmt.com/de/course/list/6/type/3.html" title="SVG">SVG</a> </div> </dd> <dd class="right-item-mouseover"> <a href="//m.sbmmt.com/de/course/list/8/type/3.html" target="_blank" title="Web Services">Web Services</a> <div class="phpcn-ps-a"> <a href="//m.sbmmt.com/de/course/list/8/type/3.html" title="Web Services">Web Services</a> <a href="//m.sbmmt.com/de/course/list/8/type/3.html" title="WSDL">WSDL</a> <a href="//m.sbmmt.com/de/course/list/8/type/3.html" title="SOAP">SOAP</a> <a href="//m.sbmmt.com/de/course/list/8/type/3.html" title="RSS">RSS</a> <a href="//m.sbmmt.com/de/course/list/8/type/3.html" title="RDF">RDF</a> </div> </dd> </dl></li> </ul> </div> </div> <div id="codeMark"></div> <div id="codeMain"> <div class="left"> <div id="codeEditor"></div> <div class="editor-btn"> <div class="editor-btn-inner"> <a href="javascript:;" class="code-btn-submit r" id="J_Commit" title="einreichen">einreichen</a> </div> </div> </div> <div class="right"> <div id="codeResult"></div> </div> <div id="close"></div> </div> </body> </html>