PHP 实例 - AJAX 实时搜索

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 所传文本<br>在 “$response” 变量中设置正确的 URL 和标题。如果找到多于一个匹配,所有的匹配都会添加到变量。<br>如果没有找到匹配,则把 $response 变量设置为 “no suggestion”。</p> </article><div class="post-copyright"><div class="post-copyright__author"><span class="post-copyright-meta"><i class="fas fa-circle-user fa-fw"></i>Author: </span><span class="post-copyright-info"><a href="https://www.hory-ai.com">hory-ai horysk</a></span></div><div class="post-copyright__type"><span class="post-copyright-meta"><i class="fas fa-square-arrow-up-right fa-fw"></i>Link: </span><span class="post-copyright-info"><a href="https://www.hory-ai.com/2024/12/07/php/PHP%E5%AE%9E%E4%BE%8B-AJAX%E5%AE%9E%E6%97%B6%E6%90%9C%E7%B4%A2/">https://www.hory-ai.com/2024/12/07/php/PHP实例-AJAX实时搜索/</a></span></div><div class="post-copyright__notice"><span class="post-copyright-meta"><i class="fas fa-circle-exclamation fa-fw"></i>Copyright Notice: </span><span class="post-copyright-info">All articles on this blog are licensed under <a href="https://www.hory-ai.com/">hory-ai.com horysk.com</a> unless otherwise stated.</span></div></div><div class="tag_share"><div class="post-meta__tag-list"><a class="post-meta__tags" href="/tags/code/">code</a><a class="post-meta__tags" href="/tags/php/">php</a></div><div class="post-share"><div class="social-share" data-image="https://www.hory-ai.com/img/favicon.ico" data-sites="facebook,twitter,wechat,weibo,qq"></div><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/css/share.min.css" media="print" onload="this.media='all'"><script src="https://cdn.jsdelivr.net/npm/butterfly-extsrc/sharejs/dist/js/social-share.min.js" defer></script></div></div><nav class="pagination-post" id="pagination"><a class="pagination-related" href="/2024/12/07/php/PHP%E5%B8%B8%E9%87%8F/" title="PHP常量"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info"><div class="info-1"><div class="info-item-1">Previous</div><div class="info-item-2">PHP常量</div></div><div class="info-2"><div class="info-item-1">PHP 常量 PHP 中的常量是指一旦定义后其值不能被改变的标识符。常量值被定义后,在脚本的其他任何地方都不能被改变。常量可以用 define() 函数或 const 关键字来定义。常量的特性 PHP 常量不变性: 常量一旦定义,其值不能改变。全局作用域: 常量在定义后,可以在整个脚本的任何地方使用,无需使用 global 关键字。数据类型: 常量的值可以是标量数据类型(如布尔值、整数、浮点数、字符串)或数组(PHP 7 及以上版本)。区分大小写: 常量名称默认是区分大小写的。如果需要定义大小写不敏感的常量,可以在 define() 函数的第三个参数设置为 true。常量是一个简单值的标识符,该值在脚本中不能改变。一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。注意: 常量在整个脚本中都可以使用。 设置 PHP 常量设置常量,使用 define() 函数,函数语法如下: bool define ( string $name , mixed $value [, bool $case_insensitive =...</div></div></div></a><a class="pagination-related" href="/2024/12/07/php/PHP%E5%AE%9E%E4%BE%8B-AJAXRSS%E9%98%85%E8%AF%BB%E5%99%A8/" title="PHP实例-AJAXRSS阅读器"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-right"><div class="info-1"><div class="info-item-1">Next</div><div class="info-item-2">PHP实例-AJAXRSS阅读器</div></div><div class="info-2"><div class="info-item-1">PHP 实例 - AJAX RSS 阅读器 RSS 阅读器用于阅读 RSS Feed。 AJAX RSS 阅读器在下面的实例中,我们将演示一个 RSS 阅读器,通过它,来自 RSS 的内容在网页不进行刷新的情况下被载入: 选择一个 RSS-feed:读取 RSS 数据 RSS-feed 数据列表… 实例解释 - HTML 页面当用户在上面的下拉列表中选择某个 RSS-feed 时,会执行名为 “showRSS()” 的函数。该函数由 “onchange” 事件触发: 实例 菜鸟教程(runoob.com) function showRSS(str) { if (str.length==0) { document.getElementById("rssOutput").innerHTML=""; return; } if (window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码 ...</div></div></div></a></nav><div class="relatedPosts"><div class="headline"><i class="fas fa-thumbs-up fa-fw"></i><span>Related Articles</span></div><div class="relatedPosts-list"><a class="pagination-related" href="/2024/12/07/php/AJAX%E7%AE%80%E4%BB%8B/" title="AJAX简介"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2024-12-07</div><div class="info-item-2">AJAX简介</div></div><div class="info-2"><div class="info-item-1">AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 AJAX 是什么?AJAX = Asynchronous JavaScript and XML.AJAX 是一种用于创建快速动态网页的技术。AJAX 通过在后台与服务器进行少量数据交换,使网页实现异步更新。这意味着可以在不重载整个页面的情况下,对网页的某些部分进行更新。传统的网页(不使用 AJAX)如果需要更新内容,必须重载整个页面。有很多使用 AJAX 的应用程序案例:Google Maps、Gmail、Youtube 和 Facebook。 AJAX 如何工作 AJAX 基于因特网标准AJAX 基于因特网标准,并使用以下技术组合: XMLHttpRequest 对象(与服务器异步交互数据)JavaScript/DOM(显示/取回信息)CSS(设置数据的样式)XML(常用作数据传输的格式) AJAX 应用程序与浏览器和平台无关的! 谷歌搜索建议(Google Suggest)随着谷歌搜索建议功能在 2005 的发布,AJAX...</div></div></div></a><a class="pagination-related" href="/2024/12/07/php/PHP$_GET%E5%8F%98%E9%87%8F/" title="PHP$_GET变量"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2024-12-07</div><div class="info-item-2">PHP$_GET变量</div></div><div class="info-2"><div class="info-item-1">PHP $_GET 变量 在 PHP 中,预定义的 $_GET 变量用于收集来自 method=”get” 的表单中的值。 $_GET 变量预定义的 $_GET 变量用于收集来自 method=”get” 的表单中的值。从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制。实例form.html 文件代码如下: 菜鸟教程(runoob.com) 名字: 年龄: 当用户点击 “Submit” 按钮时,发送到服务器的 URL 如下所示: http://www.runoob.com/welcome.php?fname=Runoob&age=3 “welcome.php” 文件现在可以通过 $_GET 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_GET 数组中的键): 欢迎 !你的年龄是 岁。 以上表单执行演示: 何时使用 method=”get”?在 HTML 表单中使用 method=”get” 时,所有的变量名和值都会显示在...</div></div></div></a><a class="pagination-related" href="/2024/12/07/php/PHP$_POST%E5%8F%98%E9%87%8F/" title="PHP$_POST变量"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2024-12-07</div><div class="info-item-2">PHP$_POST变量</div></div><div class="info-2"><div class="info-item-1">PHP $_POST 变量 在 PHP 中,预定义的 $_POST 变量用于收集来自 method=”post” 的表单中的值。 $_POST 变量预定义的 $_POST 变量用于收集来自 method=”post” 的表单中的值。从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。实例form.html 文件代码如下: 菜鸟教程(runoob.com) 名字: 年龄: 当用户点击 “提交” 按钮时,URL 类似如下所示:http://www.runoob.com/welcome.php “welcome.php” 文件现在可以通过 $_POST 变量来收集表单数据了(请注意,表单域的名称会自动成为 $_POST 数组中的键): 欢迎 !你的年龄是 岁。 通过浏览器访问演示如下: 何时使用...</div></div></div></a><a class="pagination-related" href="/2024/12/07/php/PHP-AJAX%E4%B8%8EMySQL/" title="PHP-AJAX与MySQL"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2024-12-07</div><div class="info-item-2">PHP-AJAX与MySQL</div></div><div class="info-2"><div class="info-item-1">PHP - AJAX 与 MySQL AJAX 可用来与数据库进行交互式通信。 AJAX 数据库实例下面的实例将演示网页如何通过 AJAX 从数据库读取信息:本教程使用到的 Websites 表 SQL 文件:websites.sql。 实例 选择一个网站:Google淘宝菜鸟教程微博Facebook 选择对应选项,用户信息会显示在这…… 实例解释 - MySQL 数据库在上面的实例中,我们使用的数据库表如下所示: mysql> select * from websites;+—-+————–+—————————+——-+———+| id | name | url | alexa | country |+—-+————–+—————————+——-+———+| 1 | Google | https://www.google.cm/ | 1 | USA || 2 | 淘宝 | https://www.taobao.com/ | 13 | CN ...</div></div></div></a><a class="pagination-related" href="/2024/12/07/php/PHP-AJAX%E4%B8%8EPHP/" title="PHP-AJAX与PHP"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2024-12-07</div><div class="info-item-2">PHP-AJAX与PHP</div></div><div class="info-2"><div class="info-item-1">PHP - AJAX 与 PHP AJAX (Asynchronous JavaScript and XML) 是一种用于在不刷新整个页面的情况下,与服务器交换数据的技术。AJAX 是一种在无需重新加载整个页面的情况下,能够更新部分网页的技术,它通过在后台与服务器交换数据,并能够更新部分网页内容。AJAX 允许网页动态更新部分内容,提供更快的用户体验。AJAX 通常使用 XMLHttpRequest 对象在后台与服务器进行通信,尽管它也可以使用 fetch API 等现代方法。 更多内容可以参考:AJAX 教程AJAX 的工作原理 发送请求:用户通过某种方式(如点击按钮)触发 AJAX 请求。创建请求:JavaScript 创建一个 XMLHttpRequest 对象,用于与服务器进行通信。发送请求:通过 XMLHttpRequest 对象发送请求到服务器。服务器处理:服务器接收到请求后,进行数据处理。返回响应:服务器将处理结果返回给客户端。更新页面:JavaScript 接收到服务器的响应后,更新网页的相应部分。 PHP 中使用 AJAX 的步骤1、前端:JavaScript...</div></div></div></a><a class="pagination-related" href="/2024/12/07/php/PHP5Array%E5%87%BD%E6%95%B0/" title="PHP5Array函数"><div class="cover" style="background: var(--default-bg-color)"></div><div class="info text-center"><div class="info-1"><div class="info-item-1"><i class="far fa-calendar-alt fa-fw"></i> 2024-12-07</div><div class="info-item-2">PHP5Array函数</div></div><div class="info-2"><div class="info-item-1">PHP 5 Array 函数 PHP Array 简介PHP Array 函数允许您访问并操作数组。支持简单的数组和多维数组。 安装PHP Array 函数是 PHP 核心的组成部分。无需安装即可使用这些函数。 PHP 5 Array...</div></div></div></a></div></div></div><div class="aside-content" id="aside-content"><div class="card-widget card-info text-center"><div class="avatar-img"><img src="https://www.hory-ai.com/img/favicon.ico" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"/></div><div class="author-info-name">hory-ai horysk</div><div class="author-info-description"></div><div class="site-data"><a href="/archives/"><div class="headline">Articles</div><div class="length-num">1585</div></a><a href="/tags/"><div class="headline">Tags</div><div class="length-num">30</div></a><a href="/categories/"><div class="headline">Categories</div><div class="length-num">30</div></a></div><a id="card-info-btn" href="https://www.hory-ai.com/"><i class="fab fa-github"></i><span>Follow Me</span></a></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>Announcement</span></div><div class="announcement_content">量子数字论坛!</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>Recent Posts</span></div><div class="aside-list"><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/01/15/os/2025-01-15/%E5%B9%BF%E5%B7%9E%E8%AD%A6%E6%96%B9%E6%8F%AD%E6%96%B0%E5%9E%8B%E4%BF%A1%E7%94%A8%E5%8D%A1%E8%AF%88%E9%AA%97%E7%8A%AF%E7%BD%AA%E5%86%85%E5%B9%95%E8%8A%AF%E7%89%87%E4%BF%A1%E7%94%A8%E5%8D%A12%E5%88%8605%E7%A7%92%E5%8D%B3%E8%A2%AB%E5%A4%8D%E5%88%B6/" title="广州警方揭新型信用卡诈骗犯罪内幕芯片信用卡2分05秒即被复制">广州警方揭新型信用卡诈骗犯罪内幕芯片信用卡2分05秒即被复制</a><time datetime="2025-01-15T02:13:04.542Z" title="Created 2025-01-15 10:13:04">2025-01-15</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/01/15/os/2025-01-15/2025%E5%B9%B4%E6%88%91%E5%9B%BD%E5%B0%86%E5%88%9D%E6%AD%A5%E5%BB%BA%E6%88%90%E7%85%A4%E7%9F%BF%E6%99%BA%E8%83%BD%E5%8C%96%E6%A0%87%E5%87%86%E4%BD%93%E7%B3%BB/" title="2025年我国将初步建成煤矿智能化标准体系">2025年我国将初步建成煤矿智能化标准体系</a><time datetime="2025-01-15T02:12:50.434Z" title="Created 2025-01-15 10:12:50">2025-01-15</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/01/15/os/2025-01-15/%E6%88%91%E5%9B%BD%E5%B0%86%E6%89%93%E9%80%A0%E9%9F%A7%E6%80%A7%E5%9F%8E%E5%B8%82%E5%B8%82%E6%94%BF%E5%9F%BA%E7%A1%80%E8%AE%BE%E6%96%BD%E6%99%BA%E8%83%BD%E5%8C%96%E5%8F%91%E5%B1%95%E6%99%BA%E6%85%A7%E4%BD%8F%E5%8C%BA%E6%B7%B1%E5%85%A5%E6%8E%A8%E8%BF%9B5G%E8%BD%A6%E8%81%94%E7%BD%91/" title="我国将打造韧性城市市政基础设施智能化发展智慧住区深入推进5G车联网">我国将打造韧性城市市政基础设施智能化发展智慧住区深入推进5G车联网</a><time datetime="2025-01-15T02:11:11.587Z" title="Created 2025-01-15 10:11:11">2025-01-15</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/01/15/os/2025-01-15/%E4%B8%9C%E9%A3%8E%E8%94%9A%E6%9D%A5%E4%B8%8A%E6%B1%BD%E6%99%BA%E5%B7%B1%E5%B0%8F%E7%B1%B3%E7%AD%89%E5%8A%A0%E5%BF%AB%E6%8E%A8%E5%8A%A8%E4%BA%BA%E5%BD%A2%E6%9C%BA%E5%99%A8%E4%BA%BA%E5%9C%A8%E6%B1%BD%E8%BD%A6%E8%A1%8C%E4%B8%9A%E5%88%9B%E6%96%B0%E5%BA%94%E7%94%A8/" title="东风蔚来上汽智己小米等加快推动人形机器人在汽车行业创新应用">东风蔚来上汽智己小米等加快推动人形机器人在汽车行业创新应用</a><time datetime="2025-01-15T02:11:05.459Z" title="Created 2025-01-15 10:11:05">2025-01-15</time></div></div><div class="aside-list-item no-cover"><div class="content"><a class="title" href="/2025/01/15/os/2025-01-15/%E5%9B%9B%E9%83%A8%E9%97%A8%E6%8E%A2%E7%B4%A2%E4%BB%A5%E7%A4%BE%E4%BC%9A%E4%BF%9D%E9%9A%9C%E5%8D%A1%E4%B8%BA%E8%BD%BD%E4%BD%93%E5%BB%BA%E7%AB%8B%E5%B1%85%E6%B0%91%E6%9C%8D%E5%8A%A1%E4%B8%80%E5%8D%A1%E9%80%9A%E6%8E%A8%E8%BF%9B%E9%80%82%E8%80%81%E5%8A%A9%E6%AE%8B%E6%97%A0%E9%9A%9C%E7%A2%8D%E8%AE%BE%E6%96%BD%E4%B8%8E%E5%85%AC%E5%85%B1%E6%9C%8D%E5%8A%A1%E6%95%B0%E5%AD%97%E5%8C%96%E6%94%B9%E9%80%A0/" title="四部门探索以社会保障卡为载体建立居民服务一卡通推进适老助残无障碍设施与公共服务数字化改造">四部门探索以社会保障卡为载体建立居民服务一卡通推进适老助残无障碍设施与公共服务数字化改造</a><time datetime="2025-01-15T02:09:15.785Z" title="Created 2025-01-15 10:09:15">2025-01-15</time></div></div></div></div></div></div></main><footer id="footer"><div id="footer-wrap"><div class="copyright">©2019 - 2025 By hory-ai horysk</div><div class="framework-info"><span>Framework </span><a href="https://www.hory-ai.com">Hory-ai</a><span class="footer-separator">|</span><span>Theme </span><a target="_blank" rel="noopener" href="https://www.horysk.com">Horysk</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="readmode" type="button" title="Reading Mode"><i class="fas fa-book-open"></i></button><button id="darkmode" type="button" title="Toggle Between Light and Dark Mode"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="Toggle Between Single-column and Double-column"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside-config" type="button" title="Settings"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="Back to Top"><span class="scroll-percent"></span><i class="fas fa-arrow-up"></i></button></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><div class="js-pjax"></div><script async data-pjax src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>