Ajax实现搜索文本框自动联想功能

Posted 花伤情犹在

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ajax实现搜索文本框自动联想功能相关的知识,希望对你有一定的参考价值。

前言

由于没有使用数据库,联想数据是通过List集合模拟的。

原理:

  • 前端通过Ajax将文本框数据发送给后端
  • 后端用List集合模拟数据库进行数据遍历
  • 遍历的数据结果要加上分隔符(例如本人使用的是逗号“ , ”)
  • 后端将遍历出来的数据拼接在一起发送给前端Ajax
  • 前端Ajax接收到数据对数据进行遍历
  • 利用split() 方法用于把一个字符串分割成字符串数组
  • 然后再对其数组遍历,将遍历结果和html进行拼接

效果

在这里插入图片描述


代码

注意前端用到了JQuery框架

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<script src="js/jquery-3.6.0.js"></script>
<script>
    $(function () {
        $("#content").keyup(function () {
            //获取div提示对象
            var tips = $("#tips");
            //清空提示内容
            ($("#tips").html(""));
            $.ajax({
                url:"Searchservlet",
                type:"post",
                dataType:"text",
                //将文本框的值作为发送的数据
                data:{"name":this.value},
                success:function (result) {
                    //当用户输入的内容为空的时候
                    if (result==""){//没有查询到相应数据
                        //去掉边框样式并停止下面的操作
                        tips.css("border","none");
                        return;
                    }
                    //获取结果并通过分割字符串
                    var cons =result.split(",");
                    //声明变量用来保存结果集
                    var divs ="";
                    //遍历结果集
                    for (var i =0;i<cons.length;i++){
                        //将遍历的结果拼接在div中存储在divs变量中
                        divs+="<div>"+cons[i]+"</div>"
                    }
                    //将拼接的html代码块显示在查询的结果集
                    tips.html(divs);
                    //将盒子设置为显示
                    tips.css("border","3px solid black");

                },error:function () {
                    //alert("请求失败")
                }
            })
        })
    })
</script>
<body>
<div id="divSearch" style="margin: auto;text-align: center;border: 1px;width: 250px;">
    <form action="Searchservlet" method="post">
        <input type="text" name="name" id="content">
        <input type="submit" value="搜索" id="result">
    </form>
</div>
<!--根据用户输入的内容显示出来的盒子-->
<div id="tips" style="width: 200px;margin: auto;text-align: left;">

</div>
</body>
</html>

后台servlet代码:

package servlet;

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.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/Searchservlet")
public class Searchservlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应内容类型和编码格式
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        response.setCharacterEncoding("utf-8");
        //获取用户输入的内容
        String name = request.getParameter("name");
        //模拟数据库的查询操作
        List<String> list = new ArrayList<>();
        list.add("百度");
        list.add("百事可乐");
        list.add("百世快递");
        list.add("百度翻译");
        list.add("百度百科");
        list.add("美国");
        list.add("美元");
        list.add("网易");
        list.add("美团");
        list.add("滴滴");
        list.add("滴水");
        list.add("小米");
        list.add("小新");
        list.add("OPPO");
        list.add("三星");
        list.add("花伤情犹在");
        list.add("花朵");
        //定义变量将匹配结果保存起来
        String info = "";
        //根据用户输入的内容语句数据库查询的结果进行比较
        if (!"".equals(name)){
            for (int i = 0; i < list.size(); i++) {
                //toUpperCase()将字符串转大写 toLowerCase()将字符串转小写---》目的忽略搜索时的字符串大小写
                if (list.get(i).indexOf(name.toUpperCase())>-1 || list.get(i).indexOf(name.toLowerCase())>-1){
                    if (i==list.size()-1){
                        info+=list.get(i);
                    }else {
                        info+=list.get(i)+",";
                    }

                }
            }
        }

        PrintWriter writer = response.getWriter();
        writer.write(info);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request,response);
    }
}

以上是关于Ajax实现搜索文本框自动联想功能的主要内容,如果未能解决你的问题,请参考以下文章

下拉框的搜索(有图,适用下拉选择内容较多,需要搜索,自动联想)

Vue移动端项目——搜索联想建议功能的实现(结合watch属性和使用lodash防抖节流)

使用jQuery-UI来实现一个Ajax的自动完成功能(自动填充搜索框的下拉值)

ES实现网站搜索

JavaScript实现搜索联想功能

Jquery 搜索框自动提示