搜索建议实战的目标是为了输入搜索内容,动态的进行匹配,效果图如下:

整体思路:

在客户端搜索框中触发onkeyup事件,

随时向PHP服务器请求当前输入框中的内容,

PHP服务器获取到keywords后,向数据库中模糊查找相关的数据

编写顺序为:

  SQL---->PHP------>HTML----->CSS----->JavaScript

具体实现:

  第一步:创建一个数据库(fanfan.sql),向books表中插入若干条记录

  1. SET NAMES UTF8;
  2. DROP DATABASE IF EXISTS fanfan;
  3. CREATE DATABASE fanfan CHARSET=UTF8;
  4. USE fanfan;
  5. //创建books表
  6. CREATE TABLE books(
  7. bid INT PRIMARY KEY AUTO_INCREMENT,
  8. bname ),
  9. price ,)
  10. );
  11. //插入8条记录
  12. INSERT INTO books VALUES
  13. (),
  14. (),
  15. (),
  16. (),
  17. (),
  18. (),
  19. (),
  20. ();

fanfan.sql

  第二步:创建一个PHP文件,用于从数据库查询符合条件的数据库。接收客户端提交的搜索关键字kw,执行模糊查询,把包含搜索关键字的记录全部查询出来,以HTML片段形式返回,形如:

<li>JavaScrupt从入门到精通</li>
<li>HTTP从入门到精通</li>

  1. <?php
  2. header('Content-Type:text/html;charset=UTF-8');//设置响应格式为html
  3. @$keywords=$_REQUEST['kw'] or die('kw required');//获取客户端请求的数据
  4. $conn=mysqli_connect('127.0.0.1','root','','fanfan',3306);//连接数据库
  5. $sql='SET NAMES UTF8';
  6. mysqli_query($conn,$sql);
  7. $sql="SELECT bname FROM books WHERE bname LIKE '%$keywords%'";//模糊匹配含有关键字的记录行
  8. $result=mysqli_query($conn,$sql);
  9. $list =mysqli_fetch_all($result,MYSQLI_ASSOC);//抓取所有符合条件的记录行
  10. foreach($list as $book){
  11. echo "<li>$book[bname]</li>";//遍历上一步结果的关联数组
  12. }
  13. ?>

book_search.php

  第三步:创建一个HTML文件,包含搜索框,并设置样式

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>ajax search</title>
  6. <style type="text/css">
  7. .container {
  8. position: relative;
  9. }
  10. .container #suggest {
  11. position: absolute;
  12. top: 100%;
  13. margin: 0;
  14. padding: 0;
  15. list-style: none;
  16. border: 1px solid #ccc;
  17. width: 200px;
  18. display: none;
  19. }
  20. .container #suggest li {
  21. line-height: 2em;
  22. padding: 0 10px;
  23. }
  24. .container #suggest li:hover {
  25. background: #eee;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <h3>书籍搜索</h3>
  31. <div class="container">
  32. <input type="text" id="search" /><button>搜索</button>
  33. <ul id="suggest">
  34.  
  35. </ul>
  36. </div>
  37. </body>
  38. </html>

book_search.html

  第四步:用原生的AJAX,经过四步固定套路,获取第二步中得到的结果,懒得新建一个js文件,直接把script部分的代码,放到HTML网页中</body>之前即可

  1. <script>
  2. search.onkeyup=function(){
  3. var kw=this.value;//获取input中的值
  4. if(!kw){
  5. return;//若空白,则不请求
  6. }
  7. var xhr=new XMLHttpRequest();//第一步,新建xhr对象
  8. xhr.onreadystatechange=function(){//第二步,监听状态
  9. if(xhr.readyState===4){
  10. if(xhr.status===200){
  11. doResponse(xhr);
  12. }else{
  13. console.log('响应成功但是有问题');
  14. }
  15. }
  16. }
  17. xhr.open('GET',`book_search.php?kw=${kw}`,true);//打开连接
  18. xhr.send(null);//发送连接
  19. function doResponse(xhr){//消息处理
  20. console.log(xhr);
  21. if(xhr.responseText===""){
  22. suggest.style.display='none';
  23. }else{
  24. suggest.innerHTML=xhr.responseText;
  25. suggest.style.display='block';
  26. }
  27. }
  28. }
  29. </script>

AJAX

最后,可以验证结果了,打开网址http://127.0.0.1/fanfan/book_search.html(我的本地设置的地址),即可查看效果啦~前提XAMPP打开着。。

AJAX实现google搜索建议实战的更多相关文章

  1. 关于python抓取google搜索结果的若干问题

    关于python抓取google搜索结果的若干问题     前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...

  2. Google搜索成最大入口,简单谈下个人博客的SEO

    个人静态博客SEO该考虑哪些问题呢?本篇文章给你答案 咖啡君在开始写文章时首选了微信公众号作为发布平台,但公众号在PC端的体验并不好,连最基本的文章列表都没有,所以就搭建了运维咖啡吧的网站,可以通过点 ...

  3. ElasticSearch7.X.X-初见-模仿京东搜索的实战

    目录 简介 聊聊Doug Cutting ES&Solr&Lucene ES的安装 安装可视化界面ES head插件 了解ELK 安装Kibana ES核心概念 文档 类型 索引 倒排 ...

  4. 各大搜索引擎智能提示API(JSONP跨域实现自动补全搜索建议)

    ---------------------------------------搜索引擎JSONP接口--------------------------------------------- 提示:U ...

  5. 访问Google搜索,Google学术镜像搜索

    Google学术镜像搜索:http://dir.scmor.com/google/ 不用FQ也能访问谷歌搜索网站,让我们一起Google 不用FQ也能访问谷歌搜索网站,让我们一起Google(摘自:h ...

  6. 十大谷歌Google搜索技巧分享

    前言:多数人在使用Google搜索的过程是非常低效和无谓的,如果你只是输入几个关键词,然后按搜索按钮,你将是那些无法得到Google全部信息的用户,在这篇文章中,Google搜索专家迈克尔.米勒将向您 ...

  7. 谷歌google搜索打不开、谷歌gmail邮箱及相关服务无法登录的解决的方法

    歌打不开 google打不开,与中国大陆封杀有关,可是主要是由于近期googleserver在全球范围内又一次进行了布局调整. 解决的方法是仅仅要改动用户本地计算机hosts文件就能够了. 一.Win ...

  8. 复杂的1秒--图解Google搜索技术

    谷歌(Google),一个非常成功,但又十分神秘,而且带有几分理想化色彩的互联网搜索巨人,它还是一家相当了不起的广告公司,谷歌首页上的那个搜索按钮是其年赢利200亿美元的杀手级应用,也是Interne ...

  9. 【转载】google搜索从入门到精通

    原文地址:http://www.cnblogs.com/helloIT/articles/5095668.html /***************************************** ...

随机推荐

  1. 贪心-hdu-1789-Doing Homework again

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1789 题目意思: 有n个作业,每个作业有一个截止日期,每个作业如果超过截止日期完成的时候有一个惩罚值 ...

  2. Android开发学习之Intent具体解释

    Intent简单介绍和具体解释:           Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述.               ...

  3. 【计算机视觉】基于行为的ReID演示

    帮老师做了一个简单的基于行为(主要是步态)的ReID问题的Demo,效果例如以下图: 以下是提取的集中特征,前三个都是GEI系的,后几个是基于光流场的.然后右边是识别出的几个对象的排序,由于没有角度和 ...

  4. Zedboard甲诊opencv图像处理(三)

    整个工程进展到这一步也算是不容易吧,但技术含量也不怎么高,中间乱起八糟的错误太烦人了,不管怎么样,现在面临了最大的困难吧,图像处理算法.算法确实不好弄啊,虽然以前整过,但都不是针对图像的. 现在的图像 ...

  5. [Unit Testing] Based on input value, spyOn function

    describe( 'Forgot Password: with username', ()=> { let dirElementInput; beforeEach( ()=> { // ...

  6. lseek() 定位一个已经打开的文件

    Lseek lseek()的作用是,设置文件内容的读写位置. 每个打开的文件都有一个"当前文件偏移量",是一个非负整数,用以度量从文件开始处计算的字节数.通常,读写操作都是从当前文 ...

  7. C# 超级简单的Telnet (TcpClient)客户端

    基于Sockets 没什么好说的,代码说明了所有 using System; using System.Collections.Generic; using System.Linq; using Sy ...

  8. (转)js正则表达式之中文验证

    今天做表单提交的输入框条件验证,验证是否包含中文:网上搜了一圈基于js正则表达式的验证基本不好用,而且大多都是出自一两篇原文的转帖!到底什么才是拿来主义呢.根据搜索结果,本文取精华,告诉大家一个好用的 ...

  9. 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做

    题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #in ...

  10. 锋利jQuery 学习整理之 第六章 jQuery 与Ajax 的应用

    1.Ajax 的XMLHttpRequest 对象 XMLHttpRequest 是Ajax 的核心,它是Ajax 实现的关键---发送异步请求.接受响应及执行回调都是通过它来完成的.XMLHttpR ...