ajax实现搜索联想和自动补全功能

思路

  当键盘事件发生之后,比如:keyup:键弹起事件。
 发送ajax请求,请求中提交用户输入的搜索内容,例如:北京(发送ajax请求,携带“北京”两个字)
  后端接收到ajax请求,接收到“北京”两个字,执行select语句进行模糊查询。返回查询结果。
  将查询结果封装成json格式的字符串,将json格式的字符串响应到前端。
  前端接收到json格式的字符串之后,解析这个json字符串,动态展示页面。

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax实现搜索联想和自动补全功能</title>
</head>
<body>
  当键盘事件发生之后,比如:keyup:键弹起事件。
发送ajax请求,请求中提交用户输入的搜索内容,例如:北京(发送ajax请求,携带“北京”两个字)
  后端接收到ajax请求,接收到“北京”两个字,执行select语句进行模糊查询。返回查询结果。
  将查询结果封装成json格式的字符串,将json格式的字符串响应到前端。
  前端接收到json格式的字符串之后,解析这个json字符串,动态展示页面。

<style>
    .userInput {
        width: 300px;
        height: 25px;
        font-size: 20px;
        padding-left: 5px;
    }

    .showDataDiv {
        width: 310px;
        border: 1px solid lightgray;
        background-color: antiquewhite;
        display: none;
        /*    隐藏*/
    }

    .showDataDiv p {
        padding-left: 5px;
        margin-top: 2px;
        margin-bottom: 2px;
    }

    .showDataDiv p:hover {
        cursor: pointer;
        border: 1px blue solid;
        background-color: aliceblue;
    }
</style>

<script type="text/javascript">
    window.onload = function () {
        document.getElementById("keywords").onkeyup = function () {
            if (this.value == "") {
                document.getElementById("datadiv").style.display = "none"
            } else {
                //键盘在输入框按下的时候来发送ajax请求
                //创建对象
                var xhr = new XMLHttpRequest();
                //注册函数
                xhr.onreadystatechange = function () {
                    if (xhr.readyState == 4) {
                        if (xhr.status == 200) {
                            //连接成功-->获取后端传送来的JSON字符串
                            //返回的是JSON数组
                            var html = ""
                            var jsonstrs = JSON.parse(this.responseText);
                            for (var i = 0; i < jsonstrs.length; i++) {
                                //取出
                                //  html += "<p onclick='setInput("+json[i].content+")'>"+json[i].content+"</p>";
                                html += "<p onclick='setInput(\"" + jsonstrs[i].content + "\")'>" + jsonstrs[i].content + "</p>"
                            }
                            //放到div里
                            document.getElementById("datadiv").innerHTML = html;
                            // 显示出来
                            document.getElementById("datadiv").style.display = "block"


                        }
                    }
                }

                //开启通道
                xhr.open("GET", "/a/ajax1" + "?t=" + new Date().getTime() + "&keywords=" + this.value, true);
                //发送请求
                xhr.send();
            }


        }


    }

    function setInput(data) {
        document.getElementById("keywords").value = data
        document.getElementById("datadiv").style.display = "none"

    }

</script>


<input type="text" id="keywords" class="userInput">
<div id="datadiv" class="showDataDiv">
    <!--    <p>北京疫情最新情况</p>-->
    <!-- <p>北京天气</p>-->
    <!-- <p>北京时间</p>-->
    <!-- <p>北京人</p>-->
</div>

</body>
</html>

后端代码

package com.wpc.javaweb;

import com.alibaba.fastjson.JSON;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

/**
 * @author 一介草莽子
 * version 1.0
 */
@SuppressWarnings({"all"})
@WebServlet("/ajax1")
public class QueryAjax extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response) throws ServletException, IOException {
        //获得前端发来的数据
        String keywords = request.getParameter("keywords");
        //连接数据库
        //获得驱动
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        List<Content> list= new ArrayList<>();
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            //获得链接
            conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db02", "root", "4653long");
            String sql = "select * from t_ajax where content like ?";
            ps = conn.prepareStatement(sql);
            ps.setString(1, keywords+"%");
            rs = ps.executeQuery();

            while (rs.next()) {
                String content = rs.getString("content");
                int id = rs.getInt("id");
                list.add(new Content(id,content));
            }
            //转换为JSON字符串
            String jsonString = JSON.toJSONString(list);
            response.getWriter().print(jsonString);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (rs != null) {
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }

    }
}
package com.wpc.javaweb;

/**
 * @author 一介草莽子
 * version 1.0
 */
@SuppressWarnings({"all"})
public class Content {
    private int id;
    private String content;

    public Content(int id, String content) {
        this.id = id;
        this.content = content;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }
}

数据库代码:

drop table if exists t_ajax;
create table t_ajax(
    id int primary key auto_increment,
    content varchar(255)
);
insert into t_ajax(content) values('javascript');
insert into t_ajax(content) values('javaweb');
insert into t_ajax(content) values('java');
insert into t_ajax(content) values('java123');
insert into t_ajax(content) values('mysql');
insert into t_ajax(content) values('myweb');
insert into t_ajax(content) values('myapp');
insert into t_ajax(content) values('jdk');
commit;
select * from t_ajax;

猜你喜欢

转载自blog.csdn.net/m0_56398287/article/details/128371459
今日推荐