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 /***************************************** ...
随机推荐
- C#用注册表开机自动启动某某软件
代码如下: public static void chkAutoRun(bool isRun) { if (isRun)//开机自动启动 { try { RegistryKey runKey = Re ...
- docke 网络配置2
一,docker 的bridge模式是和vmware中的nat模式类似的,但是如果想要弄成和vmwae中的bridge怎么办呢? 说明,bridge模式获取的Ip是与宿主机的ip是出于同一个网段的. ...
- 使用Express创建一个简单的示例
1.安装Express 使用npm包安装工具来安装Express安装包,打开npm命令行,输入: npm install -g express 2.创建一个工程 本示例是在windows下创建的,项目 ...
- JS传递参数时对中文进行编码和解码
var b ="啊,我要过去"; var a = encodeURI(b);//对中文编码 ...
- cxf的使用及安全校验-01创建简单的服务端接口
最近因为项目的需要,研究了一下webservice的使用: 这里以cxf2.7.0为例,大致介绍一下,也用于备份啦(张立胜) 大致介绍一下项目的情况:项目有maven管理,webservice调用的方 ...
- Oracle存储过程procedure
--给plsql块设置一个名称保存下来便于调用 /* Create or replace procedure 名称 As 声明变量 Begin //代码块 End; --plsql块 Declare ...
- 关于Oracle dmp文件导入随笔
进入博客园已经两年多了,每次想写点什么,都是给自己个各种借口,不了了之~今天就从Oracle数据库最长用的导入开始吧! 1.低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,比如:10 ...
- 洛谷 P1896 互不侵犯King
P1896 [SCOI2005]互不侵犯King 题目描述 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共 ...
- 安装python3.4
1.http://www.python.org下载适合自己机型的镜像文件 2.一路“next”到底,安装python到C盘上 3.计算机-属性-高级系统设置-环境变量,将刚刚安装的python路径添加 ...
- sqlalchemy操作Mysql
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”.SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合:而对象集合的抽象又 ...