AJAX学习笔记9 搜索联想自动补全

AJAX学习笔记8 跨域问题及解决方案_biubiubiu0706的博客-CSDN博客

其实就一个功能

搜索联想

自动补全

键盘按下事件keydown 键盘弹起事件keyup 做模糊查询

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax实现搜索联想自动补全</title>
    <style type="text/css">
        .userInput{
            width: 300px;
            height: 25px;
            font-size: 20px;
            margin-left: 20px;
            padding-left: 5px;
        }
        .showDataDiv{
            width: 300px;
            margin-left: 20px;
            border: 1px solid lightblue;
            background-color: antiquewhite;

        }
        .showDataDiv p{
            padding-left: 5px;
            margin-top: 3px;
            margin-bottom: 5px;
        }
        .showDataDiv p:hover{/*加小手*/
            cursor: pointer;
            border:1px blue solid;
            background-color: aliceblue;
        }
    </style>
</head>
<body>
<input type="text" class="userInput">
<div class="showDataDiv">
    <p>北京疫情最新情况</p>
    <p>北京天气</p>
    <p>北京时间</p>
    <p>北京房产</p>
    <p>北京美女</p>
</div>
</body>
</html>

加个display:none;就隐藏掉

插入数据库

引入fastjson,mysql 依赖

后端代码

复制代码
import com.alibaba.fastjson.JSON;

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.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author hrui
 * @date 2023/9/7 9:53
 */
@WebServlet("/getAny")
public class GetAnyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String keywords = req.getParameter("keywords");
        Connection conn=null;
        PreparedStatement ps=null;
        ResultSet rs=null;
        List<Map> list=new ArrayList<>();

        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            conn = DriverManager.getConnection("xxx", "xxx", "xxx");
            String sql="select id,content from t_ajax where content like ?";
            ps=conn.prepareStatement(sql);
            ps.setString(1, keywords+"%");
            rs = ps.executeQuery();

            while(rs.next()){
                String id = rs.getString("id");
                String content = rs.getString("content");
                Map<String,String> map=new HashMap<>();
                map.put("id", "id");
                map.put("content", content);
                list.add(map);
            }
        } catch (ClassNotFoundException | SQLException e) {
            e.printStackTrace();
        }finally {
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(ps!=null){
                try {
                    ps.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        String s = JSON.toJSONString(list);
        writer.print(s);
    }
}

前端

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ajax实现搜索联想自动补全</title>
    <style type="text/css">
        .userInput{
            width: 300px;
            height: 25px;
            font-size: 20px;
            margin-left: 20px;
            padding-left: 5px;
        }
        .showDataDiv{
            width: 300px;
            margin-left: 20px;
            border: 1px solid lightblue;
            background-color: antiquewhite;
            display:none;
        }
        .showDataDiv p{
            padding-left: 5px;
            margin-top: 3px;
            margin-bottom: 5px;
        }
        .showDataDiv p:hover{/*加小手*/
            cursor: pointer;
            border:1px blue solid;
            background-color: aliceblue;
        }
    </style>
</head>
<body>
<script type="text/javascript">
    /*不使用JQuery*/
    window.onload=()=>{
        document.getElementById("keywords").onkeyup=()=>{
            let xhr=new XMLHttpRequest();
            xhr.onreadystatechange=()=>{
                if(xhr.readyState==4){
                    if(xhr.status>=200&&xhr.status<300){
                        //[{"id":"xxx","content":"xxxx"},{"id":"xxx","content":"xxxx"}]
                        const json=JSON.parse(xhr.responseText)
                        const html=""
                        for(let i=0;i<json.length;i++){
                            html+="<p onclick='setInput(\""+json[i].content+"\")'>"+json[i].content+"</p>"
                        }
                        document.getElementById("showDataDiv").innerHTML=html
                        //将div显示出来
                        document.getElementById("showDataDiv").style.display="block"
                    }
                }
            }
            console.log(this.value)
            xhr.open("get","/d/getAny?keywords="+this.value,true)
            xhr.send()
        }
    }

    function setInput(value){
        document.getElementById("keywords").value=value
        //将div隐藏
        document.getElementById("showDataDiv").style.display="none"
    }
</script>
<input type="text" class="userInput" id="keywords">
<div class="showDataDiv">
<!--    <p>北京疫情最新情况</p>-->
<!--    <p>北京天气</p>-->
<!--    <p>北京时间</p>-->
<!--    <p>北京房产</p>-->
<!--    <p>北京美女</p>-->
</div>
</body>
</html>
相关推荐
limengshi13839232 分钟前
机器学习面试:请介绍几种常用的学习率衰减方式
人工智能·学习·机器学习
知识分享小能手1 小时前
React学习教程,从入门到精通,React 组件核心语法知识点详解(类组件体系)(19)
前端·javascript·vue.js·学习·react.js·react·anti-design-vue
周周记笔记2 小时前
学习笔记:第一个Python程序
笔记·学习
丑小鸭是白天鹅2 小时前
Kotlin协程详细笔记之切线程和挂起函数
开发语言·笔记·kotlin
潘达斯奈基~2 小时前
《大数据之路1》笔记2:数据模型
大数据·笔记
优雅鹅2 小时前
ARM、AArch64、amd64、x86_64、x86有什么区别?
arm开发·学习
..过云雨2 小时前
05.【Linux系统编程】进程(冯诺依曼体系结构、进程概念、进程状态(注意僵尸和孤儿)、进程优先级、进程切换和调度)
linux·笔记·学习
咸甜适中2 小时前
rust语言 (1.88) egui (0.32.2) 学习笔记(逐行注释)(二十八)使用图片控件显示图片
笔记·学习·rust·egui
一又四分之一.3 小时前
高数基础知识(下)②
笔记
ZHANG8023ZHEN3 小时前
fMoE论文阅读笔记
论文阅读·笔记