AJAX实现google搜索建议实战
搜索建议实战的目标是为了输入搜索内容,动态的进行匹配,效果图如下:
整体思路:
在客户端搜索框中触发onkeyup事件,
随时向PHP服务器请求当前输入框中的内容,
PHP服务器获取到keywords后,向数据库中模糊查找相关的数据
编写顺序为:
SQL---->PHP------>HTML----->CSS----->JavaScript
具体实现:
第一步:创建一个数据库(fanfan.sql),向books表中插入若干条记录
- SET NAMES UTF8;
- DROP DATABASE IF EXISTS fanfan;
- CREATE DATABASE fanfan CHARSET=UTF8;
- USE fanfan;
- //创建books表
- CREATE TABLE books(
- bid INT PRIMARY KEY AUTO_INCREMENT,
- bname ),
- price ,)
- );
- //插入8条记录
- INSERT INTO books VALUES
- (),
- (),
- (),
- (),
- (),
- (),
- (),
- ();
fanfan.sql
第二步:创建一个PHP文件,用于从数据库查询符合条件的数据库。接收客户端提交的搜索关键字kw,执行模糊查询,把包含搜索关键字的记录全部查询出来,以HTML片段形式返回,形如:
<li>JavaScrupt从入门到精通</li>
<li>HTTP从入门到精通</li>
- <?php
- header('Content-Type:text/html;charset=UTF-8');//设置响应格式为html
- @$keywords=$_REQUEST['kw'] or die('kw required');//获取客户端请求的数据
- $conn=mysqli_connect('127.0.0.1','root','','fanfan',3306);//连接数据库
- $sql='SET NAMES UTF8';
- mysqli_query($conn,$sql);
- $sql="SELECT bname FROM books WHERE bname LIKE '%$keywords%'";//模糊匹配含有关键字的记录行
- $result=mysqli_query($conn,$sql);
- $list =mysqli_fetch_all($result,MYSQLI_ASSOC);//抓取所有符合条件的记录行
- foreach($list as $book){
- echo "<li>$book[bname]</li>";//遍历上一步结果的关联数组
- }
- ?>
book_search.php
第三步:创建一个HTML文件,包含搜索框,并设置样式
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="UTF-8">
- <title>ajax search</title>
- <style type="text/css">
- .container {
- position: relative;
- }
- .container #suggest {
- position: absolute;
- top: 100%;
- margin: 0;
- padding: 0;
- list-style: none;
- border: 1px solid #ccc;
- width: 200px;
- display: none;
- }
- .container #suggest li {
- line-height: 2em;
- padding: 0 10px;
- }
- .container #suggest li:hover {
- background: #eee;
- }
- </style>
- </head>
- <body>
- <h3>书籍搜索</h3>
- <div class="container">
- <input type="text" id="search" /><button>搜索</button>
- <ul id="suggest">
- </ul>
- </div>
- </body>
- </html>
book_search.html
第四步:用原生的AJAX,经过四步固定套路,获取第二步中得到的结果,懒得新建一个js文件,直接把script部分的代码,放到HTML网页中</body>之前即可
- <script>
- search.onkeyup=function(){
- var kw=this.value;//获取input中的值
- if(!kw){
- return;//若空白,则不请求
- }
- var xhr=new XMLHttpRequest();//第一步,新建xhr对象
- xhr.onreadystatechange=function(){//第二步,监听状态
- if(xhr.readyState===4){
- if(xhr.status===200){
- doResponse(xhr);
- }else{
- console.log('响应成功但是有问题');
- }
- }
- }
- xhr.open('GET',`book_search.php?kw=${kw}`,true);//打开连接
- xhr.send(null);//发送连接
- function doResponse(xhr){//消息处理
- console.log(xhr);
- if(xhr.responseText===""){
- suggest.style.display='none';
- }else{
- suggest.innerHTML=xhr.responseText;
- suggest.style.display='block';
- }
- }
- }
- </script>
AJAX
最后,可以验证结果了,打开网址http://127.0.0.1/fanfan/book_search.html(我的本地设置的地址),即可查看效果啦~前提XAMPP打开着。。
AJAX实现google搜索建议实战的更多相关文章
- 关于python抓取google搜索结果的若干问题
关于python抓取google搜索结果的若干问题 前一段时间一直在研究如何用python抓取搜索引擎结果,在实现的过程中遇到了很多的问题,我把我遇到的问题都记录下来,希望以后遇到同样问题的童 ...
- Google搜索成最大入口,简单谈下个人博客的SEO
个人静态博客SEO该考虑哪些问题呢?本篇文章给你答案 咖啡君在开始写文章时首选了微信公众号作为发布平台,但公众号在PC端的体验并不好,连最基本的文章列表都没有,所以就搭建了运维咖啡吧的网站,可以通过点 ...
- ElasticSearch7.X.X-初见-模仿京东搜索的实战
目录 简介 聊聊Doug Cutting ES&Solr&Lucene ES的安装 安装可视化界面ES head插件 了解ELK 安装Kibana ES核心概念 文档 类型 索引 倒排 ...
- 各大搜索引擎智能提示API(JSONP跨域实现自动补全搜索建议)
---------------------------------------搜索引擎JSONP接口--------------------------------------------- 提示:U ...
- 访问Google搜索,Google学术镜像搜索
Google学术镜像搜索:http://dir.scmor.com/google/ 不用FQ也能访问谷歌搜索网站,让我们一起Google 不用FQ也能访问谷歌搜索网站,让我们一起Google(摘自:h ...
- 十大谷歌Google搜索技巧分享
前言:多数人在使用Google搜索的过程是非常低效和无谓的,如果你只是输入几个关键词,然后按搜索按钮,你将是那些无法得到Google全部信息的用户,在这篇文章中,Google搜索专家迈克尔.米勒将向您 ...
- 谷歌google搜索打不开、谷歌gmail邮箱及相关服务无法登录的解决的方法
歌打不开 google打不开,与中国大陆封杀有关,可是主要是由于近期googleserver在全球范围内又一次进行了布局调整. 解决的方法是仅仅要改动用户本地计算机hosts文件就能够了. 一.Win ...
- 复杂的1秒--图解Google搜索技术
谷歌(Google),一个非常成功,但又十分神秘,而且带有几分理想化色彩的互联网搜索巨人,它还是一家相当了不起的广告公司,谷歌首页上的那个搜索按钮是其年赢利200亿美元的杀手级应用,也是Interne ...
- 【转载】google搜索从入门到精通
原文地址:http://www.cnblogs.com/helloIT/articles/5095668.html /***************************************** ...
随机推荐
- 贪心-hdu-1789-Doing Homework again
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1789 题目意思: 有n个作业,每个作业有一个截止日期,每个作业如果超过截止日期完成的时候有一个惩罚值 ...
- Android开发学习之Intent具体解释
Intent简单介绍和具体解释: Intent:协助应用间的交互与通信,Intent负责相应用中一次操作的动作.动作涉及的数据.附加数据进行描写叙述. ...
- 【计算机视觉】基于行为的ReID演示
帮老师做了一个简单的基于行为(主要是步态)的ReID问题的Demo,效果例如以下图: 以下是提取的集中特征,前三个都是GEI系的,后几个是基于光流场的.然后右边是识别出的几个对象的排序,由于没有角度和 ...
- Zedboard甲诊opencv图像处理(三)
整个工程进展到这一步也算是不容易吧,但技术含量也不怎么高,中间乱起八糟的错误太烦人了,不管怎么样,现在面临了最大的困难吧,图像处理算法.算法确实不好弄啊,虽然以前整过,但都不是针对图像的. 现在的图像 ...
- [Unit Testing] Based on input value, spyOn function
describe( 'Forgot Password: with username', ()=> { let dirElementInput; beforeEach( ()=> { // ...
- lseek() 定位一个已经打开的文件
Lseek lseek()的作用是,设置文件内容的读写位置. 每个打开的文件都有一个"当前文件偏移量",是一个非负整数,用以度量从文件开始处计算的字节数.通常,读写操作都是从当前文 ...
- C# 超级简单的Telnet (TcpClient)客户端
基于Sockets 没什么好说的,代码说明了所有 using System; using System.Collections.Generic; using System.Linq; using Sy ...
- (转)js正则表达式之中文验证
今天做表单提交的输入框条件验证,验证是否包含中文:网上搜了一圈基于js正则表达式的验证基本不好用,而且大多都是出自一两篇原文的转帖!到底什么才是拿来主义呢.根据搜索结果,本文取精华,告诉大家一个好用的 ...
- 后缀自动机/回文自动机/AC自动机/序列自动机----各种自动机(自冻鸡) 题目泛做
题目1 BZOJ 3676 APIO2014 回文串 算法讨论: cnt表示回文自动机上每个结点回文串出现的次数.这是回文自动机的定义考查题. #include <cstdlib> #in ...
- 锋利jQuery 学习整理之 第六章 jQuery 与Ajax 的应用
1.Ajax 的XMLHttpRequest 对象 XMLHttpRequest 是Ajax 的核心,它是Ajax 实现的关键---发送异步请求.接受响应及执行回调都是通过它来完成的.XMLHttpR ...