`
as1001001
  • 浏览: 91028 次
  • 性别: Icon_minigender_1
  • 来自: 鞍山
社区版块
存档分类
最新评论

简单的搜索输入框提示功能jsp+ajax

阅读更多
首先整体的思路是:HTML端由一个input和div组成,div的隐藏和显示实现下拉框提示,input的字符输入动作触发js的函数,通过ajax来与jsp通信,获得模糊查询结果,返回前台来显示。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<meta content="text/html" charset="GBK" />
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>

<BODY>
<script type="text/javascript">
// ajax.js

var XMLHttpReq;
var completeDiv;
var inputField;
var completeTable;
var completeBody;
//创建XMLHttpRequest对象      
function createXMLHttpRequest() { 
var o//=============
      if(window.XMLHttpRequest) { //Mozilla 浏览器 
              o = new XMLHttpRequest(); 
      } 
      else if (window.ActiveXObject) { // IE浏览器 
              try { 
                    o = new ActiveXObject("Msxml2.XMLHTTP"); 
              } catch(e){ 
                    try{ 
                          o = new ActiveXObject("Microsoft.XMLHTTP"); 
                    } catch (e) {} 
              } 
      } 
return o;//=============
} 
function findNames() { 
      inputField = document.getElementById("names");          
      completeTable = document.getElementById("complete_table"); 
      completeDiv = document.getElementById("popup"); 
      completeBody = document.getElementById("complete_body"); 
      if (inputField.value.length > 0) { 
            var o=createXMLHttpRequest();          
            var url = "http://192.168.1.101/OAapp/jsp/index.jsp?names=" + escape(inputField.value);
//此处escape函数可以去掉,escape是采用ISO Latin字符集对指定的字符串进行编码。 
            o.open("GET", url, true); 
            o.onreadystatechange = function(){
     if (o.readyState == 4) { // 判断对象状态
          if (o.status == 200) { // 信息已经成功返回,开始处理信息 
				  setNames(o.responseXML.getElementsByTagName("res"));
          }else { //页面不正常 
              window.alert("您所请求的页面有异常。"); 
          } 
      } 

};//指定响应函数 
            o.send(null); // 发送请求 
      } else { 
            clearNames(); 
      } 
} 

// 处理返回匹配信息函数
function processMatchResponse() { 
      if (XMLHttpReq.readyState == 4) { // 判断对象状态
          if (XMLHttpReq.status == 200) { // 信息已经成功返回,开始处理信息 
                  alert("XMLHttpReq.responseText");   //输出看是否有乱码===============
                  setNames(XMLHttpReq.responseXML.getElementsByTagName("res")); 
          }else { //页面不正常 
              window.alert("您所请求的页面有异常。"); 
          } 
      } 
} 

//生成与输入内容匹配行
function setNames(names) {           
      clearNames();
      var size = names.length;
      setOffsets();
      var row, cell, txtNode;
      for (var i = 0; i < size; i++) {
          var nextNode = names[i].firstChild.data;
          row = document.createElement("tr");
          cell = document.createElement("td");    
          cell.onmouseout = function() {
              this.className='mouseOver';
          };
          cell.onmouseover = function() {
              this.className='mouseOut';
          };
          cell.setAttribute("bgcolor", "#ffddcc");
          cell.setAttribute("border", "0");
          cell.setAttribute("width",inputField.offsetWidth+"px");
          cell.onclick = function() {
              completeField(this);
          } ;
          txtNode = document.createTextNode(nextNode);
          cell.appendChild(txtNode);
          row.appendChild(cell);
          completeBody.appendChild(row);
      }
}

//设置显示位置                
function setOffsets() {
      completeTable.style.width = "auto";    //显示自动完成的提示框宽度自动伸展或缩小
	  gettable(inputField);
}
//取绝对位置
function getAbsPosition(obj) {
    var r = {
        left: obj.offsetLeft,
        top : obj.offsetTop
    };
    r.left = obj.offsetLeft;
    r.top  = obj.offsetTop;
    if(obj.offsetParent) {
        var tmp = getAbsPosition(obj.offsetParent);
        r.left += tmp.left;
        r.top  += tmp.top;
    }
    return r;
  }
  //为提示定位
function gettable(obj) {
    var pos = getAbsPosition(obj);
    pos.top += obj.offsetHeight;
    completeDiv.style.top = pos.top + "px";
    completeDiv.style.left = pos.left + "px";
    completeDiv.style.width = obj.offsetWidth + "px";
    completeDiv.style.visibility = '';
  }

//计算显示位置
function calculateOffset(field, attr) {
      var offset = 0;
      while(field) {
          offset += field[attr];
          field = field.offsetParent;
      }
      return offset;
}

//填写输入框
function completeField(cell) {
      inputField.value = cell.firstChild.nodeValue;
      clearNames();
}

//清除自动完成行
function clearNames() {
      var ind = completeBody.childNodes.length;
      for (var i = ind - 1; i >= 0 ; i--) {
          completeBody.removeChild(completeBody.childNodes[i]);
      }
      completeDiv.style.border = "none";
}
</script>
<input type="text" id="names" onkeyup="findNames();" size="20">

<div id="popup" border="0" style="z-index:99;visibility:hidden;position:absolute;border:1px solid black;">
      <table id="complete_table" border="0" cellspacing="0" cellpadding="0" style="background-color: #cceeff;">
          <tbody id="complete_body"></tbody>
      </table>
</div>
</BODY>
</HTML>



<%@ page contentType="text/html; charset=GBK" %>

<%@ page language="java" %>

<%@ page import="com.mysql.jdbc.Driver" %>

<%@ page import="java.sql.*" %>

<%
    
response.setContentType("application/xml;charset=GBK");
response.setHeader("Cache-Control", "no-cache");

//驱动程序名
String driverName="org.gjt.mm.mysql.Driver";

//数据库用户名

String userName="root";

//密码

String userPasswd="";

//数据库名

String dbName="";

//表名

String tableName="";

//联结字符串

String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&password="+userPasswd+"&useUnicode=true&characerEncoding=GBK";
String key=request.getParameter("names");

response.getWriter().write("<?xml version='1.0' encoding='GBK' ?>");
Class.forName("org.gjt.mm.mysql.Driver").newInstance();

Connection connection=DriverManager.getConnection(url);

Statement statement = connection.createStatement();

String sql="SELECT * FROM "+tableName+" WHERE ht_person_id like '%"+key+"%' ";

ResultSet rs = statement.executeQuery(sql); 

//获得数据结果集合

ResultSetMetaData rmeta = rs.getMetaData();
response.getWriter().write("<response>");
String col;
// 输出每一个数据值
while(rs.next()) {
	col = new String(rs.getString(2).getBytes("ISO-8859-1"),"GBk");
	response.getWriter().write("<res>"+col+"</res>");
} 
response.getWriter().write("</response>");
rs.close(); 
statement.close(); 
connection.close(); 
%>


这里要注意与数据库通信的中文字符要统一字符集。
MYSQL对应"8859_1"。
分享到:
评论

相关推荐

    jsp+ajax实现输入框自动搜索

    本文将详细介绍如何使用jsp和ajax技术实现输入框自动搜索功能,类似于百度搜索。 一、标题:jsp+ajax实现输入框自动搜索 该标题表明该技术使用jsp和ajax实现输入框自动搜索功能。 二、描述:类似于百度的搜索一样...

    jsp+ajax+servlet+jdbc案例

    本案例将详细阐述如何利用这些基本技术,不依赖额外的框架或库,实现一个简单的Web系统,如用户登录、数据的增删查改等常见功能。 首先,JSP是Java的一种动态网页技术,它允许在HTML页面中嵌入Java代码,从而实现了...

    jsp+ajax聊天室

    【jsp+ajax聊天室】是一种基于JavaServer Pages (JSP) 和 Asynchronous JavaScript and XML (AJAX) 技术实现的在线实时交流平台。JSP是服务器端的技术,用于生成动态网页,而AJAX则是一种在不刷新整个页面的情况下与...

    JSP+Ajax+Servlet 自动完成类似谷歌百度搜索

    本项目的核心是利用JSP、Ajax和Servlet技术实现一个自动完成的搜索功能,类似于谷歌或百度的搜索建议。这种功能在用户输入查询词时,能够在后台实时获取匹配的建议结果,提升用户的搜索体验。以下是这个项目涉及到的...

    基于JSP+AJAX的类百度搜索动模糊查询

    基于JSP+AJAX的类百度搜索动模糊查询 该资源主要讲述了使用JSP、AJAX和Servlet技术来实现类似百度的模糊查询功能。 JSP页面分析 在JSP页面中,我们可以看到主要的HTML结构和JavaScript代码。HTML结构主要包括一个...

    JSP + AJAX 的聊天室

    【JSP + AJAX 的聊天室】是一个典型的Web应用程序开发实例,它结合了JavaServer Pages(JSP)技术和Asynchronous JavaScript and XML(AJAX)技术,为用户提供了一个实时、交互式的在线聊天平台。在这个系统中,JSP...

    JSP+ajax仿百度输入提示下拉列表

    本项目"JSP+ajax仿百度输入提示下拉列表"就是利用这两种技术来实现类似百度搜索框的实时输入提示功能,为用户提供友好且高效的输入体验。 首先,我们需要理解JSP的基础。JSP是一种服务器端脚本语言,它允许开发者在...

    jsp+ajax发送GET请求的方法.docx

    jsp+ajax 发送 GET 请求的方法 本文主要介绍了 jsp+ajax 发送 GET 请求的方法,包含了 Ajax 数据的发送与 JSP 文件的处理技巧。下面是详细的知识点: 一、Ajax 发送 GET 请求 Ajax 发送 GET 请求是通过创建 ...

    jsp智能提示完整版,jquery+ajax+text实现

    【标题】"jsp智能提示完整版,jquery+ajax+text实现"揭示了这是一个关于Web开发的项目,主要涉及的技术栈是JavaServer Pages (JSP)、jQuery、Ajax以及文本处理。这个项目意在模仿百度的智能提示功能,即在用户输入时...

    JSP+AJAX华丽界面聊天室

    【JSP+AJAX华丽界面聊天室】 JSP(JavaServer Pages)和AJAX(Asynchronous JavaScript and XML)是Web开发中的两种核心技术,它们结合使用可以创建动态、交互性强的网页应用,例如我们这里提到的“JSP+AJAX华丽...

    jsp+ajax Long config

    【标题】"jsp+ajax Long config"涉及到的技术点主要集中在JavaServer Pages (JSP)、Asynchronous JavaScript and XML (Ajax)以及可能的配置优化。这是一个Web应用程序开发中的常见组合,用于构建动态、交互性强的...

    用JSP+Ajax实现搜索框的下拉列表

    在本文中,我们将深入探讨如何使用JSP和Ajax技术来实现一个类似百度或谷歌搜索框的下拉列表功能。这个功能通常用于提供用户输入时的实时建议,提高用户体验,使得用户能够快速找到他们可能感兴趣的搜索项。 首先,...

    JSP+AJAX华丽界面聊天室(jQuery框架)

    【JSP+AJAX华丽界面聊天室】是一个利用JavaServer Pages(JSP)技术和AJAX(Asynchronous JavaScript and XML)动态网页技术构建的实时交互应用。在这个项目中,开发人员选择了jQuery作为AJAX的框架,因为jQuery简化...

    jsp+ajax发送GET请求的方法

    JSP与Ajax结合使用是Web开发中常见的做法,尤其是通过Ajax技术实现异步数据交互。本文将介绍JSP结合Ajax技术通过GET方法发送请求的详细步骤和实现方法,该技术在数据请求和处理方面非常实用,尤其适用于需要在用户...

    Ajax+jsp 输入框下拉提示

    本项目"Ajax+jsp 输入框下拉提示"是针对输入框的一种常见功能,即当用户在输入框中输入文字时,系统自动显示下拉列表提供相关建议,提升用户体验。这种技术常用于搜索框、地址输入等场景,以减少用户输入错误和提高...

    jsp+ajax做的聊天室

    【jsp+ajax做的聊天室】是一个基于Web技术实现的在线交流平台,主要利用Java Server Pages (JSP) 和 Asynchronous JavaScript and XML (AJAX) 技术,为用户提供实时的私聊和群聊功能。在这个聊天室中,用户无需经过...

    基于Servlet+JSP+Ajax的在线聊天室Demo

    【在线聊天室】是一个常见的Web应用项目,它利用了Servlet、JSP以及Ajax技术来实现。这个Demo旨在帮助开发者理解如何在实际应用中构建实时交互的聊天环境。下面将详细介绍这三个关键技术及其在聊天室中的作用。 **...

    jsp+ajax实现googleSuggest(全)

    综上所述,"jsp+ajax实现googleSuggest(全)"项目涵盖了JSP、AJAX以及前端交互设计等多个技术点,通过它们的结合,可以实现类似Google搜索框的智能提示功能,提升用户体验。在实际开发中,还需要考虑性能优化、错误...

Global site tag (gtag.js) - Google Analytics