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 /***************************************** ...
随机推荐
- [置顶] STM32移植contiki进阶之三(中):timer 中文版
鉴于自己英语水平不高,在这里,将上一篇关于contiki 的timer的文章翻译为中文,让自己在学习的时候,更方便点.文中有许多不是很通顺的地方,将就吧. Timers Contiki系统提供了一套时 ...
- web工程调用hadoop集群1.2
本实例代码在lz的资源中有上传,有需要的可以参考(下载后的文件解压后有两个,一个直接导入myeclipse工程,另外的jar放在hadoop的lib下面,只需修改Utils中的ip即可运行该程序): ...
- Hadoop集群运行JNI程序
要在Hadoop集群运行上运行JNI程序,首先要在单机上调试程序直到可以正确运行JNI程序,之后移植到Hadoop集群就是水到渠成的事情. Hadoop运行程序的方式是通过jar包,所以我们需要将所有 ...
- Apache与Tomcat区别联系
监控服务(师傅让我监控Tomcat,我知道Apache,所以以为他两是一个东东.结果半天就没有找到Tomcat的服务进程,还理直气壮的说:找不到Apache......希望这篇简单的,白话分析,能让还 ...
- css伪类选择器详细解析及案例使用-----伪元素
伪元素:(css3中将所有伪元素前变成了两个冒号,即::first-letter.::first-line.::before.::after.::selection.目的是为了区分伪元素与伪类.对于I ...
- POJ - 2653 - Pick-up sticks 线段与线段相交
判断线段与线段相交 莫名其妙的数据量 #include <iostream> #include <cstdio> #include <vector> #includ ...
- hdu1520 第一道树形DP,激动哇咔咔!
A - 树形dp Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Sta ...
- Linux下运行C++程序出现"段错误(核心已转储)"的原因
今天写程序出现了“段错误(核心已转储)"的问题,查了一下资料,加上自己的实践,总结了以下几个方面的原因. 1.内存访问出错 这类问题的典型代表就是数组越界. 2.非法内存访问 出现这类问题 ...
- 安装apache服务器时遇到只能本地访问,局域网内其他电脑不能访问apache:
安装apache服务器时遇到只能本地访问,局域网内其他电脑不能访问apache:1.查看selinux运行状态及关闭selinux/usr/sbin/sestatus -v文本模式关闭selinux: ...
- CloudStack核心类ApiServlet、ApiServer、ApiDispatcher、GenericDaoBase源码分析
ApiServlet 首先从整体上看下ApiServlet,Outline视图如下, 一.注意@Inject依赖的是javax.inject.jar,它和spring的@Autowired的区别在于使 ...