PHP 实例 - AJAX 实时搜索

PHP 实例 - AJAX 实时搜索

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

AJAX Live Search

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

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

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

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

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

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

QQ图片20161010103643.png

上面实例中的结果在一个 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> <p>在 "$response" 变量中设置正确的 URL 和标题。如果找到多于一个匹配,所有的匹配都会添加到变量。</p> <p>如果没有找到匹配,则把 $response 变量设置为 "no suggestion"。</p> <p><br></p> </div> </div> <a class="course-btn course_code_header_next" href="//m.sbmmt.com/zh">继续学习</a> </div> <div class="layui-col-md6 editor-box"> <div id="code_spread_shrink"> <div id="code_spread_shrink_show" unselectable="on"> <span>||</span> </div> </div> <div class="editor-tab js-editor-tab"> <div class="editor-left icon-left editor-op"></div> <div class="editor-view"> <ul class="clearfix" id="J_TabType" style="width: 120px; margin-left: 0px;"> <li class="ui-tabs-active"><a href="javascript:;">新建文件</a></li> </ul> </div> <div class="editor-right icon-right editor-op"></div> </div> <div id="editor-tabs-html" data-filename="index.html" data-lang="php" style="font-size: 16px;height:600px"> <html> <head> <script> function showResult(str) { if (str.length==0) { document.getElementById("livesearch").innerHTML=""; document.getElementById("livesearch").style.border="0px"; return; } if (window.XMLHttpRequest) {// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行 xmlhttp=new XMLHttpRequest(); } else {// IE6, IE5 浏览器执行 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("livesearch").innerHTML=xmlhttp.responseText; document.getElementById("livesearch").style.border="1px solid #A5ACB2"; } } xmlhttp.open("GET","livesearch.php?q="+str,true); xmlhttp.send(); } </script> <script type="text/javascript" src="/js/jquery.3.5.2.min.m.js"></script> </head><div style="position: fixed;right: 0;top:100px;width: 125px; z-index:2000;"><div ><a target="_blank" rel="nofollow" href="https://www.520xingyun.com/from/188bet.php" ><img width="120px" height="550px" src="https://www.520xingyun.com/images/188_120.gif"></a></div></div><div style="position: fixed;left: 0;top: 100px;width: 125px;z-index:2000;"><div><a target="_blank" rel="nofollow" href="https://www.520xingyun.com/from/188bet.php"><img width="120px" height="550px" src="https://www.520xingyun.com/images/188_120.gif"></a></div></div> <body> <form> <input type="text" size="30" onkeyup="showResult(this.value)"> <div id="livesearch"></div> </form> </body> </html> </div> <div class="editor-btn"> <div class="editor-btn-inner"> <a href="javascript:;" class="code-btn-submit" id="J_Commit" title="提交">提交</a> <a href="javascript:;" class="code-btn-reset " id="J_EditorReset" title="重置代码">重置代码</a> <div class="aotorun" style="display: block;"> <input type="checkbox" id="aotoruncheck" title="选中后修改代码将自动生效,不选中需要提交才可生效"> <label for="aotoruncheck" title="选中后修改代码将自动生效,不选中需要提交才可生效">自动运行</label> </div> </div> </div> </div> <div class="layui-col-md3" id="viewPort-content"></div> <!-- 右侧章节列表 --> </div> </div> <div class="phpSyyBox"> <div class="phpSyyLeft"> <div class="phpSyySyj"> <span class="right"><a href="//m.sbmmt.com/zh/code/355.html" title="上一节"><b class="icon3"></b>上一节</a></span> <em></em> <span class="right"><a href="//m.sbmmt.com/zh/code/361.html" title="下一节"><b class="icon2"></b>下一节</a></span> </div> <div class="phpSyyQhlx"> <a href="//m.sbmmt.com/zh/course.html" target="_blank" title="教程列表"><b></b>教程列表</a> </div> <div class="phpSyyHqbz"> <a href="//m.sbmmt.com/zh/wenda.html" target="_blank" title="获取帮助"><b></b>获取帮助</a> </div> <div class="clear"></div> </div> <div class="clear"></div> </div> <div class="layui-main"> <div class="layui-row"> <div class="layui-col-md9"> <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief"> <ul class="layui-tab-title"> <li class="layui-this">课程推荐</li> <li id="code_down_li">课件下载</li> </ul> <div class="layui-tab-content"> <!--推荐课程--> <div class="layui-tab-item layui-show"> <ul class="diy-vodeo diy-li-left php-video-ul"> <li><a href="//m.sbmmt.com/zh/course/5.html" title=""><img alt="PHP快速入门免费教程" src="https://img.php.cn/upload/course/000/000/041/61c4418d918bd160.jpg" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>PHP快速入门免费教程</h3> </div> <div class="php-course-bottom"> <span class="l">47462 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/594.html" title=""><img alt="php ajax快速入门视频教程" src="https://img.php.cn/upload/course/000/000/068/625d28e05a62a103.jpg" height="124" width="100%"> <div class="php-course-intro"> <h3><i>中级</i>php ajax快速入门视频教程</h3> </div> <div class="php-course-bottom"> <span class="l">11517 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/78.html" title=""><img alt="快速入门Git教程" src="https://img.php.cn/upload/course/000/000/068/6253c03f80d6c350.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>快速入门Git教程</h3> </div> <div class="php-course-bottom"> <span class="l">22333 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/100.html" title=""><img alt="RDF快速入门教程" src="https://img.php.cn/upload/course/000/000/068/6253cef37d64f498.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>RDF快速入门教程</h3> </div> <div class="php-course-bottom"> <span class="l">7263 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/714.html" title=""><img alt="HTML5+CSS3快速入门视频教程" src="https://img.php.cn/upload/course/000/000/068/6257ca5a76b09289.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>HTML5+CSS3快速入门视频教程</h3> </div> <div class="php-course-bottom"> <span class="l">15370 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/294.html" title=""><img alt="布尔教育git快速入门视频教程" src="https://img.php.cn/upload/course/000/000/068/625d258a0c17c492.jpg" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>布尔教育git快速入门视频教程</h3> </div> <div class="php-course-bottom"> <span class="l">11729 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/1328.html" title=""><img alt="CSS3最新教程快速入门通俗易懂" src="https://img.php.cn/upload/course/000/000/015/618a115b95f89108.jpg" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>CSS3最新教程快速入门通俗易懂</h3> </div> <div class="php-course-bottom"> <span class="l">4331 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/1496.html" title=""><img alt="前端Vue3实战【手写vue项目】" src="https://img.php.cn/upload/course/000/000/068/639b12e98e0b5441.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>中级</i>前端Vue3实战【手写vue项目】</h3> </div> <div class="php-course-bottom"> <span class="l">2857 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/1495.html" title=""><img alt="APIPOST教程【网络通信相关的技术概念普及】" src="https://img.php.cn/upload/course/000/000/068/63996f34c6c94370.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>APIPOST教程【网络通信相关的技术概念普及】</h3> </div> <div class="php-course-bottom"> <span class="l">1795 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/1494.html" title=""><img alt="第二十二期_综合实战" src="https://img.php.cn/upload/course/000/000/068/6396fa7cacf3b832.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>中级</i>第二十二期_综合实战</h3> </div> <div class="php-course-bottom"> <span class="l">5521 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/1493.html" title=""><img alt="第二十二期_PHP编程" src="https://img.php.cn/upload/course/000/000/068/6396fa6f383ca123.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>第二十二期_PHP编程</h3> </div> <div class="php-course-bottom"> <span class="l">5172 人在看</span> </div></a></li> <li><a href="//m.sbmmt.com/zh/course/1492.html" title=""><img alt="第二十二期_前端开发" src="https://img.php.cn/upload/course/000/000/068/6396fa6140e14800.png" height="124" width="100%"> <div class="php-course-intro"> <h3><i>初级</i>第二十二期_前端开发</h3> </div> <div class="php-course-bottom"> <span class="l">8713 人在看</span> </div></a></li> </ul> </div> <div class="layui-tab-item"> <div id="code_down" style="margin: 0 30px 26px;"> <div class="no_data" style="text-align: center;min-height: 490px;line-height:112px;padding: 190px 0;box-sizing: border-box;color: #e3e3e3;font-size: 20px;"> <div style="background: url(/static/images/lesson_video_lists.png) no-repeat;margin-right: 20px;width: 118px;height: 112px;background-position: 0 -389px;float:left;"></div>课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~ </div> </div> </div> </div> </div> </div> <div class="layui-col-md3 video-right-course"> <div class="layui-col-md12 title"> <p>看过本课程的同学也在学</p> </div> <div class="layui-col-md12 php-video-img"> <a class="recommend" href="//m.sbmmt.com/zh/course/812.html" target="_blank"><img width="300" height="160" src="https://img.php.cn/upload/course/000/000/041/620debc3eab3f377.jpg" alt="最新ThinkPHP 5.1全球首发视频教程(60天成就PHP大牛线上培训班课)"><span class="font14">491155 次播放</span></a> </div> <div class="layui-col-md12 php-video-list"> <ul> <li><a class="font14 color66" title="简单聊聊PHP创业那点事" href="//m.sbmmt.com/zh/course/1503.html" target="_blank">简单聊聊PHP创业那点事</a></li> <li><a class="font14 color66" title="Web前端开发极速入门" href="//m.sbmmt.com/zh/course/901.html" target="_blank">Web前端开发极速入门</a></li> <li><a class="font14 color66" title="大型实战天龙八部之开发Mini版MVC框架仿糗事百科网站" href="//m.sbmmt.com/zh/course/836.html" target="_blank">大型实战天龙八部之开发Mini版MVC框架仿糗事百科网站</a></li> <li><a class="font14 color66" title="PHP实战开发极速入门: PHP快速创建[小型商业论坛]" href="//m.sbmmt.com/zh/course/902.html" target="_blank">PHP实战开发极速入门: PHP快速创建[小型商业论坛]</a></li> <li><a class="font14 color66" title="登录验证与经典留言板" href="//m.sbmmt.com/zh/course/866.html" target="_blank">登录验证与经典留言板</a></li> <li><a class="font14 color66" title="计算机网络知识集合" href="//m.sbmmt.com/zh/course/1463.html" target="_blank">计算机网络知识集合</a></li> <li><a class="font14 color66" title="快速入门Node.JS全套完整版" href="//m.sbmmt.com/zh/course/1462.html" target="_blank">快速入门Node.JS全套完整版</a></li> <li><a class="font14 color66" title="最懂你的大前端课:HTML5/CSS3/ES6/NPM/Vue/...【原创】" href="//m.sbmmt.com/zh/course/1455.html" target="_blank">最懂你的大前端课:HTML5/CSS3/ES6/NPM/Vue/...【原创】</a></li> <li><a class="font14 color66" title="自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)" href="//m.sbmmt.com/zh/course/1467.html" target="_blank">自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)</a></li> </ul> </div> </div> </div> </div> <div class="phpcn-modal-layer fixed" style="z-index:9004;visibility:visible;opacity:1;display:none;"> <div class="phpcn-modal-title"> <div class="phpcn-modal-draggable dragging"> <span>笔记</span> <a href="javascript:void(0)" class="phpcn-icon-close phpcn-modal-close js-modal-close">X</a> </div> </div> <div class="phpcn-modal-inner"> <div class="phpcn-modal-dialog"></div> </div> </div> <div class="phpFoot"> <div class="phpFootIn"> <div class="phpFootCont"> <div class="phpFootLeft"> <dl> <dt> <a href="//m.sbmmt.com/zh/about/us.html" rel="nofollow" target="_blank" title="关于我们" class="cBlack">关于我们</a> <a href="//m.sbmmt.com/zh/about/disclaimer.html" rel="nofollow" target="_blank" title="免责声明" class="cBlack">免责声明</a> <a href="//m.sbmmt.com/zh/update/article_0_1.html" target="_blank" title="Sitemap" class="cBlack">Sitemap</a> <div class="clear"></div> </dt> <dd class="cont1"> PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长! </dd> </dl> </div> </div> </div> </div> <input type="hidden" id="verifycode" value="/captcha.html"> </body> </html>