使用Ajax实现百度下拉框

本是古典 何须时尚 2023-06-25 10:07 96阅读 0赞

百度下拉框

在使用百度搜索时,在输入框中输入部分文字后,下面会将与该文字相关的词组展示出来,该功能就可以使用ajax来实现。
注册输入框的onkeyup事件,该事件触发时,将输入框中填写的内容使用ajax发送到servlet中,在servlet中根据用户的输入去数据库中查询,之后将查询出的数据再发送给jsp中,最后将该数据展示在页面即可。

效果图(当然这里页面做的比较简单):输入一个火字即出现以下效果,并可以点击使文本框中内容变为点击的内容。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2NoYXNlcXJy_size_16_color_FFFFFF_t_70

代码如下(注:其中引用的MyAjax.js在上一个博客):

首先是JSP(baidu.jsp):

  1. <%@ page language="java" contentType="text/html; charset=UTF-8"
  2. pageEncoding="UTF-8"%>
  3. <!DOCTYPE html>
  4. <html>
  5. <head>
  6. <meta charset="UTF-8">
  7. <title>百度下拉框</title>
  8. </head>
  9. <body>
  10. <!-- 用户输入框 -->
  11. <div id="divsearch">
  12. <input type="text" name="name" id="name" />
  13. <input type="submit" value="搜索">
  14. </div>
  15. <!-- 下拉提示框 -->
  16. <div id="tips" style="display: none; border: 1px solid red; background-color: white; width: 171px; top: 135px;"></div>
  17. </body>
  18. <script type="text/javascript" src="${pageContext.request.contextPath }/MyAjax.js"></script>
  19. <script type="text/javascript">
  20. window.onload = function(){
  21. var searchElement = document.getElementById("name");
  22. //获取下拉提示框的div对象
  23. var div = document.getElementById("tips");
  24. //给输入框注册按键弹起事件
  25. searchElement.onkeyup = function(){
  26. //获取输入框的值
  27. var name = this.value;
  28. //如果输入框没有内容,将下拉提示框隐藏
  29. if(name == ""){
  30. div.style.display = "none";
  31. return;
  32. }
  33. //获取XMLHttpRequest对象
  34. var xhr = getXMLHttpRequest();
  35. //回调函数
  36. xhr.onreadystatechange = function(){
  37. if(xhr.readyState == 4){
  38. if(xhr.status == 200){
  39. var str = xhr.responseText;//获取服务器返回的数据
  40. if(str == ""){
  41. return;
  42. }
  43. //返回数据格式以","区分的字符串,例如:monkey,小猴子,1024
  44. //var result = str.split(",");//result:{"monkey","小猴子","1024"}
  45. //使用json格式进行数据传输
  46. var result = JSON.parse(str);
  47. var childDivs = "";
  48. //循环把数据放入到div中
  49. for(var i=0; i<result.length; i++){
  50. childDivs += "<div onclick='writeText(this)' onmouseover='changeBackgroundColor(this)' onmouseout='recoverBackgroundColor(this)'>" + result[i] + "</div>";
  51. //childDivs += "<div>"+result[i]+"</div>";
  52. }
  53. console.log(childDivs);
  54. //把多个childDivs放入列表div中
  55. div.innerHTML = childDivs;
  56. //将列表显示
  57. div.style.display = "block";
  58. }
  59. }
  60. }
  61. xhr.open("get","${pageContext.request.contextPath}/search?name="+ name+"&time="+new Date().getTime());
  62. xhr.send(null);
  63. }
  64. }
  65. //将文本填充到搜索框
  66. function writeText(div){
  67. //获取搜索框对象
  68. var searchElement = document.getElementById("name");
  69. //将选中的div的值添加到搜索框中
  70. searchElement.value = div.innerHTML;
  71. //将下拉提示框隐藏
  72. div.parentNode.style.display = "none";
  73. }
  74. //鼠标悬浮时,改变背景色
  75. function changeBackgroundColor(div){
  76. div.style.backgroundColor = "orange";
  77. }
  78. //鼠标离开时,回复背景色
  79. function recoverBackgroundColor(div){
  80. div.style.backgroundColor = "";
  81. }
  82. </script>
  83. </html>

Servlet部分(SearchServlet.java):

  1. package com.rong.servlet;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import com.alibaba.fastjson.JSONArray;
  11. /**
  12. * Servlet implementation class SerchServlet
  13. */
  14. @WebServlet("/search")
  15. public class SerchServlet extends HttpServlet {
  16. private static final long serialVersionUID = 1L;
  17. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  18. //解决乱码问题
  19. request.setCharacterEncoding("UTF-8");
  20. response.setContentType("text/html;charset=UTF-8");
  21. //获取Ajax传过来的数据
  22. String name = request.getParameter("name");
  23. //根据用户的输入查询数据库,这里省略数据库的操作,手动创建一个List
  24. List<String> result = new ArrayList<>();
  25. result.add("火影忍者");
  26. result.add("火影博人传");
  27. result.add("火影还在更吗");
  28. result.add("火影鸣人");
  29. result.add("火花");
  30. //把集合中的数据转换为字符串返回到网页
  31. String str = "";
  32. //如果用户输入的内容是以m开头的话,则将数据返回
  33. if(name.startsWith("火")){
  34. // for (int i = 0; i < result.size(); i++) {
  35. // if(i>0){
  36. // str+=",";
  37. // }
  38. // str+=result.get(i);
  39. // }
  40. //使用Json格式进行数据传输
  41. str = JSONArray.toJSONString(result);
  42. }
  43. System.out.println(str);
  44. //把数据响应到客户端
  45. response.getWriter().write(str);
  46. }
  47. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  48. doGet(request, response);
  49. }
  50. }

发表评论

表情:
评论列表 (有 0 条评论,96人围观)

还没有评论,来说两句吧...

相关阅读

    相关 jQuery实现搜索

    最近项目需求,写了一个类似百度搜索框的功能。 把代码整理了一遍,然后分享出来给大家看看,如果有不对的地方请多指教。 实现效果![70][] 使用的语言:html,css,