java ajax搜索提示_Servlet+Ajax实现搜索框智能提示

简介:搜索框相信大家都不陌生,几乎每天都会在各类网站进行着搜索。有没有注意到,很多的搜索功能,当输入内容时,下面会出现提示。这类提示就叫做搜索框的智能提示,本门课程就为大家介绍如何使用Servlet和Ajax来实现。主要介绍实现原理和代码的前后台实现过程。

项目结构

7d5c053c2fd762a27b3d9f6718acb974.png

首先我们需要先导入以上5个jar包,当然也可以选择maven工程导入相关依赖。

代码实现

SearchServlet.java

import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONArray;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.util.ArrayList;

import java.util.List;

public class SearchServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

}

static List list=new ArrayList<>();

static {

list.add("ajax");

list.add("ajax post");

list.add("bad");

list.add("bill");

list.add("james");

list.add("jerry");

}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//System.out.println("123");

response.setCharacterEncoding("utf-8");

request.setCharacterEncoding("utf-8");

String keyword=request.getParameter("keyword");

//得到关联数据

List listData=getData(keyword);

//返回json格式

System.out.println(JSONArray.toJSONString(listData));

response.getWriter().write(JSONArray.toJSONString(listData).toString());

}

public List getData(String keyword){

List data=new ArrayList<>();

for(String s:list){

if(s.contains(keyword)){

data.add(s);

}

}

return data;

}

}

index.jsp

Created by IntelliJ IDEA.

User: Crush

Date: 2019/7/19

Time: 17:09

To change this template use File | Settings | File Templates.

--%>

#mydiv{

position: absolute;

left: 50%;

top:50%;

margin-left: -250px;

margin-top: -50px;

}

#keyword{

height: 30px;

}

#baidu{

height: 30px;

background-color: #3388FF;

}

.mouseOver{

background: #708090;

color:white;

}

.mouseOut{

background: white;

color: #000000;

}

var xmlHttp;

function getMoreContents() {

//获得用户输入信息的关联函数

var content=document.getElementById("keyword");

if(content.value==""){

clearContent();

return;

}

//alert(content)

//然后给服务器发送输入内容,Ajax异步发送

//使用xmlhttp对象

xmlHttp=createXmlHttp();

//alert(xmlHttp)

//要给服务器发送数据

var url="search?keyword="+escape(content.value);//escape防止中文

xmlHttp.open("GET",url,true);

//true表示javascript脚本会在send方法之后继续执行,不会等待服务器响应

//xmlhttp绑定回调方法,xmlhttp状态改变的时候被调用,出发回调函数,只关心4这个状态

//当完成之后在调用才有意义

xmlHttp.onreadystatechange=callback;

xmlHttp.send(null);

}

function createXmlHttp() {

//获得xmlhttp对象

//大多数浏览器使用的

var xmlHttp;

if(window.XMLHttpRequest){

xmlHttp=new XMLHttpRequest();

}

//考虑浏览器的兼容性

if(window.ActiveXObject){

xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");

if(!xmlHttp){

xmlHttp=new ActiveXObject("Mscxml2.XMLHTTP")

}

}

return xmlHttp;

}

//回调函数

function callback() {

//4代表完成

if(xmlHttp.readyState==4){

//200代表服务器相应成功

if(xmlHttp.status==200){

//交互成功获得相应的数据,文本格式

var result=xmlHttp.responseText;

//解析获得的数据

var json=eval("("+result+")");

//获得数据后,可以动态的显示这些数据,展示在输入框下面

//alert(json);

//显示在输入框下

setContent(json);

}

}

}

//设置关联数据的展示

function setContent(contents) {

clearContent();

setLocation();

//获得关联数据的长度,来确定生成多少

var size=contents.length;

for(var i=0;i

var nextNode=contents[i];

var tr=document.createElement("tr");

var td=document.createElement("td");

td.setAttribute("border","0");

td.setAttribute("bgcolor","#FFFAFA");

td.οnmοuseοver=function () {

this.className="mouseOver";

};

td.οnmοuseοut=function () {

this.className="mouseOut";

};

td.οnmοusedοwn=function(){

//这个方法实现当鼠标点击一个关联的数据时,关联数据自动设置为输入框的数据

document.getElementById("keyword").value=this.innerHTML;

};

var text=document.createTextNode(nextNode);

td.appendChild(text);

tr.appendChild(td);

document.getElementById("content-table-body").appendChild(tr);

}

}

function clearContent() {

//清空之前的数据

var contentTableBody=document.getElementById("content-table-body");

var size=contentTableBody.childNodes.length;

for(var i=size-1;i>=0;i--){

contentTableBody.removeChild(contentTableBody.childNodes[i])

}

document.getElementById("popDiv").style.border="none";

}

function keyWordBlur() {

//当失去焦点的时候关联信息清空

clearContent();

}

function setLocation() {

//关联信息的显示位置要与输入框一致

var content=document.getElementById("keyword");

var width=content.offsetWidth-1.5;//输入框的宽度

var left=content["offsetLeft"];//道左边框的距离

var top=content["offsetTop"];//到顶部的距离

//获得显示数据的div

var popDiv=document.getElementById("popDiv");

popDiv.style.border="black 1px solid";

popDiv.style.left=left+"px";

popDiv.style.top=top+"px";

popDiv.style.width=width+"px";

document.getElementById("content-table").style.width=width+"px";

}

百度一下

web.xml

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"

version="4.0">

/index.jsp

search

SearchServlet

search

/search

运行效果

067169042a74dcac6c1d1f644e77f586.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值