ajax+servlet实现百度智能小搜索框———慕课课程
来源:互联网 发布:淘宝托管公司被骗18万 编辑:程序博客网 时间:2024/05/17 05:09
本人的第一篇博客
/** * @author xiaohejun * Man Always Remember Love Because of Romance Only. * */
一.实现效果:
1.serach.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>搜索</title> <style type="text/css"> #myDiv { position:absolute; left: 50%; top: 30%; margin-left: -200px; margin-top: -50px; } .mouseOver{ background: #708090; color: #FFFAFA; } .mouseOut{ background: #FFFAFA; color: #000000; } </style> <script type="text/javascript"> var xmlHttp; /*获得用户关联信息*/ function getMoreContents() { // 首先获得用户输入 var content = document.getElementById("keyword"); if(content.value == ""){ return; } // 然后给服务器发送用户输入类容,用ajax异步发送请求,获得一个对象,骄傲做xmlHttp xmlHttp = createXmlHttp(); // 要给服务器发送数据,escape()方法对字符串进行编码 var url="search?keyword=" + decodeURI(content.value); // 和服务器建立链接,true参数表示javascript脚本会在send()方法之后继续执行,而且不会等待来自服务器的响应 xmlHttp.open("GET",url); // 绑定一个回调方法,这个会调方法会在xmlHttp状态改变0-4,我们只关心4(complete)这个状态,完成之后,调用回调方法 xmlHttp.onreadystatechange=callback; xmlHttp.send(null); } // 清空之前的数据 function clearContent() { var tbody = document.getElementById("content_table_body"); var size = tbody.childNodes.length; for (var i = size-1; i >= 0;i--) { tbody.removeChild(tbody.childNodes[i]); } document.getElementById("popDiv").style.border = "none"; } //回调函数 function callback() { if(xmlHttp.readyState==4){ // 服务器响应成功 if(xmlHttp.status==200){ // 交互成功,获得响应数据 var result = xmlHttp.responseText; // 解析成JSON格式 var json = eval("("+result+")"); // 获得数据之后,就可以动态显示这些数据,把这些数据展示到输入框的下面 setContent(json); } } } // 设置关联数据的展示 function setContent(contents) { clearContent(); setLocation(); var size = contents.length; for (var i = 0; i < size; i++) { var nextNode = contents[i]; var tr = document.createElement("tr"); var td = document.createElement("td"); td.setAttribute("border","0"); td.bgColor = "white"; td.onmouseover = function () { this.className = 'mouseOver'; }; td.onmouseout = function () { this.className = 'mouseOut'; } td.onmousedown = function() { document.getElementById("keyword").value = this.innerHTML; } var text = document.createTextNode(nextNode); td.appendChild(text); tr.appendChild(td); document.getElementById('content_table_body').appendChild(tr); } } // 获得xmlHttp对象 function createXmlHttp() { // 对于大多数浏览器适用的 var xmlHttp; if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } // 要考虑浏览器的兼容 if (window.ActiveXObiect) { xmlHttp = new ActiveXObiect("Microsoft.XMLHTTP"); if (!xmlHttp) { xmlHttp = new ActiveXObiect("Msxml2.XMLHTTP"); } } return xmlHttp; } function keywordBlur() { clearContent(); } // 设置显示的位置 function setLocation() { // 关联信息的显示位置要和输入框一致 var content = document.getElementById("keyword"); // 输入框的宽度 var width = content.offsetWidth; // 到左边框的距离 var left = content["offsetLeft"]; // 到顶部的距离 var top = content["offsetTop"] + content.offsetHeight; // 获得显示数据的div var popDiv = document.getElementById("popDiv"); popDiv.style.border = "black 1px solid"; popDiv.style.left = left + "px"; popDiv.style.top = top + "px"; popDiv.style.width = width + "px"; document.getElementById("content_table").style.width = width + "px"; } </script></head><body><div id="myDiv"> <!-- 输入框 --> <input type="text" size="50" id="keyword" onkeyup="getMoreContents()" onblur="keywordBlur()" onfocus="getMoreContents()"/> <input type="button" value="百度一下" width="50px"/> <!-- 内容展示的区域 --> <div id="popDiv"> <table id="content_table" bgcolor="#FFFAFA" border="0" cellspacing="0" cellpadding="0"> <tbody id="content_table_body"> </tbody> </table> </div></div></body></html>
2.SearchServlet.java
package com.servlet;import java.io.IOException;import java.util.ArrayList;import java.util.List;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 net.sf.json.JSONArray;/** * Servlet implementation class search */@WebServlet("/search")public class SearchServlet extends HttpServlet { private static final long serialVersionUID = 1L; private static List<String> datas; /** * @see HttpServlet#HttpServlet() */ public SearchServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ static { datas = new ArrayList<String>(); datas.add("ajax"); datas.add("ajax post"); datas.add("b啊哈"); datas.add("b哈"); datas.add("这是ajax"); datas.add("你全家都是ajax"); } public List<String> getData(String keyword) { List<String> list = new ArrayList<String>(); for (String data : datas) { if (data.contains(keyword)) { list.add(data); } } return list; } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ response.setCharacterEncoding("UTF-8"); request.setCharacterEncoding("UTF-8");; String keyword = request.getParameter("keyword"); List<String> listData = getData(keyword); response.getWriter().write(JSONArray.fromObject(listData).toString()); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}
注意:不可以使用escape()函数编码,已经过时
阅读全文
0 0
- ajax+servlet实现百度智能小搜索框———慕课课程
- Servlet+Ajax实现百度智能搜索
- Servlet+Ajax实现搜索框智能提示
- Ajax+Servlet实现智能搜索框
- Servlet+Ajax实现搜索框智能提示
- Js+ajax实现智能百度搜索框
- Servlet+Ajax实现简易的仿百度搜索框智能提示
- servlet+ajax智能搜索框智能提示
- Ajax+Servlet实现搜索框的智能提示
- Servlet+Ajax实现简单的搜索框智能提示
- ajax(2)实现智能输入提示(类似百度搜索框智能输入)
- php & ajax 小例子——仿百度搜索自动完成下拉框
- 基于Servlet百度搜索效果的Ajax的实现实例
- Ajax+Servlet+jsp仿百度搜索效果
- ajax百度搜索框
- 超级简单的实现搜索框智能提示 JQuery+Servlet
- Servlet+ajax实现模糊搜索
- C# 实现百度搜索框智能提示功能
- 前端测试
- C++输出流名字重命名,代码重用
- 常用图像库整理
- 多级指针避免野指针
- RxJava操作符
- ajax+servlet实现百度智能小搜索框———慕课课程
- format() in python
- 两倍
- js中正则表达式的常用方法和引用
- 怎么查看调用栈关系
- 图像检索:基于内容的图像检索技术
- 2017"百度之星"程序设计大赛
- 纪中集训d2 提高A组模拟
- 实现第三方的yum仓库