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

x33g5p2x  于2021-09-19 转载在 其他  
字(3.6k)|赞(0)|评价(0)|浏览(385)

前言

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

原理:

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

效果

在这里插入图片描述


代码

注意前端用到了JQuery框架

前端代码:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. </head>
  7. <script src="js/jquery-3.6.0.js"></script>
  8. <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>
  9. <body>
  10. <div id="divSearch" style="margin: auto;text-align: center;border: 1px;width: 250px;">
  11. <form action="Searchservlet" method="post">
  12. <input type="text" name="name" id="content">
  13. <input type="submit" value="搜索" id="result">
  14. </form>
  15. </div>
  16. <!--根据用户输入的内容显示出来的盒子-->
  17. <div id="tips" style="width: 200px;margin: auto;text-align: left;">
  18. </div>
  19. </body>
  20. </html>

后台servlet代码:

  1. package servlet;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. import java.io.PrintWriter;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. @WebServlet("/Searchservlet")
  12. public class Searchservlet extends HttpServlet {
  13. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. //设置响应内容类型和编码格式
  15. request.setCharacterEncoding("utf-8");
  16. response.setContentType("text/html;charset=utf-8");
  17. response.setCharacterEncoding("utf-8");
  18. //获取用户输入的内容
  19. String name = request.getParameter("name");
  20. //模拟数据库的查询操作
  21. List<String> list = new ArrayList<>();
  22. list.add("百度");
  23. list.add("百事可乐");
  24. list.add("百世快递");
  25. list.add("百度翻译");
  26. list.add("百度百科");
  27. list.add("美国");
  28. list.add("美元");
  29. list.add("网易");
  30. list.add("美团");
  31. list.add("滴滴");
  32. list.add("滴水");
  33. list.add("小米");
  34. list.add("小新");
  35. list.add("OPPO");
  36. list.add("三星");
  37. list.add("花伤情犹在");
  38. list.add("花朵");
  39. //定义变量将匹配结果保存起来
  40. String info = "";
  41. //根据用户输入的内容语句数据库查询的结果进行比较
  42. if (!"".equals(name)){
  43. for (int i = 0; i < list.size(); i++) {
  44. //toUpperCase()将字符串转大写 toLowerCase()将字符串转小写---》目的忽略搜索时的字符串大小写
  45. if (list.get(i).indexOf(name.toUpperCase())>-1 || list.get(i).indexOf(name.toLowerCase())>-1){
  46. if (i==list.size()-1){
  47. info+=list.get(i);
  48. }else {
  49. info+=list.get(i)+",";
  50. }
  51. }
  52. }
  53. }
  54. PrintWriter writer = response.getWriter();
  55. writer.write(info);
  56. }
  57. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  58. this.doPost(request,response);
  59. }
  60. }

相关文章