`
y8820960
  • 浏览: 115787 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ajax+json自动提示Demo

    博客分类:
  • j2ee
 
阅读更多

下载地址:http://download.csdn.net/download/honghu549599aaa/4479865

 

Autocomplete:

/**
 * @author :LYL
 *@date:2011-4-21,下午11:15:29
 */
package com.lyl.service;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

public class Autocomplete extends HttpServlet {

    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/xml");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
        String userword=URLDecoder.decode(request.getParameter("wordtext"),"utf-8");
        String datas=getXml(userword,basePath);
        out.println(datas);
        out.flush();
        out.close();
    }

    /**
     * 获得匹配的字母,返回List类型
     * @return
     */
    private static List<String> getResultList(String userword,String path){
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        List<String> resultlist=new ArrayList<String>();
        try {
            DocumentBuilder db=dbf.newDocumentBuilder();
            Document document=db.parse(path+"/Words.xml");
            NodeList words=document.getElementsByTagName("word");
            int length=words.getLength();
            for(int i=0;i<length;i++){
                Node node=words.item(i);
                //获得字母
                String result=node.getFirstChild().getNodeValue();
                //这边进行一些逻辑处理,字符串的匹配,(后续工作)
                if(result.contains(userword)){
                    resultlist.add(result);
                }
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return resultlist;
    }

    /**
     * 返回结果的XML字符串
     * @return
     */
    private static String getXml(String userword,String path){
        List<String> list=getResultList(userword,path);
        Iterator<String> iterator=list.iterator();
        DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
        DocumentBuilder db=null;
        Document document=null;
        try {
            db=dbf.newDocumentBuilder();
            document=db.newDocument();
            //创建根节点
            Element root=document.createElement("words");
            //根节点添加到dom树上
            document.appendChild(root);
            while(iterator.hasNext()){
                String content=iterator.next();
                //创建文本节点
                Text word=document.createTextNode(content);
                //创建word节点
                Element child=document.createElement("word");
                child.appendChild(word);
                root.appendChild(child);
            }
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        }
        return doc2Xml(document);
    }

    private static String doc2Xml(Document document){
        //创建一个DOM转换器
        TransformerFactory  transformerFactory  =  TransformerFactory.newInstance();
        ByteArrayOutputStream  outputStream=null;
        try {
            Transformer transformer = transformerFactory.newTransformer();
            transformer.setOutputProperty(OutputKeys.ENCODING,"GB2312");
            transformer.setOutputProperty(OutputKeys.INDENT,"yes");
            outputStream  =  new  ByteArrayOutputStream();
            transformer.transform(new DOMSource(document), new StreamResult(outputStream));
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }
        return outputStream.toString();
    }
    
}

 src/word.xml

<?xml version="1.0" encoding="UTF-8"?>
<words>
    <word>abd</word>
    <word>abandon</word>
    <word>ability</word>
    <word>append</word>
    <word>attention</word>
    <word>administrator</word>
    <word>你好</word>
</words>

 ============

css/styles.css

@CHARSET "UTF-8";

* {
	font-size: 18px;
}


#content {
	width: 300px;
	height: 30px;
	padding: 0px auto;
}

#button {
	width: 100px;
	height: 30px;
}

.pro {
	cursor: default;
}

#auto {
	background-color: white;
}

 js/autopromot.js

//高亮索引
var highlightindex=-1;

//设置文本框的内容
function setContent(con,index){
	var context=con.eq(index).text();
	$("#content").val(context);
}

//设置背景颜色
function setBkColor(con,index,color){
	con.eq(index).css("background-color",color);
}

$(document).ready(
	function(){
		//获得输入框节点
		var inputItem=$("#content");
		var inputOffset=inputItem.offset();
		var autonode=$("#auto");
		//设置提示框隐藏
		autonode.hide().css("border","1px black solid").css("position","absolute")
		.css("top",inputOffset.top+inputItem.height()+5+"px")
		.css("left",inputOffset.left+"px").width(inputItem.width()+"px");	

		//当键盘抬起时触发事件执行访问服务器业务
		$("#content").keyup(
			function(event){
				var myevent=event||window.event;
				var mykeyCode=myevent.keyCode;
				//字母,退格,删除,空格
				if(mykeyCode>=65&&mykeyCode<=90||mykeyCode==8||mykeyCode==46||mykeyCode==32){
					//清除上一次的内容
					autonode.html(" ");
					//获得文本框内容
					var word=$("#content").val();
					var timeDelay;
					if(word!=""){
						//取消上次提交
						window.clearTimeout(timeDelay);
						//延迟提交,这边设置的为400ms
						timeDelay=window.setTimeout(
							//将文本框的内容发到服务器
							$.post("Autocomplete",{wordtext:encodeURI(word)},
								function(data){
								//将返回数据转换为JQuery对象
								var jqObj=$(data);
								//找到所有的word节点
								var wordNodes=jqObj.find("word");
								wordNodes.each(
									function(i){
										//获得返回的单词内容
										var wordNode=$(this);
										var newNode=$("<div>").html(wordNode.text()).attr("id",i).addClass("pro");
										//将返回内容附加到页面
										newNode.appendTo(autonode);
										//处理鼠标事件
										var con=$("#auto").children("div");
										//鼠标经过
										newNode.mouseover(
											function(){
												if(highlightindex!=-1){
													setBkColor(con,highlightindex,"white");
												}
												highlightindex=$(this).attr("id");
												$(this).css("background-color","#ADD8E6");
												setContent(con,highlightindex);
											}	
										);
										//鼠标离开
										newNode.mouseout(
											function(){
												$(this).css("background-color","white");
											}	
										);
										//鼠标点击
										newNode.click(
											function(){
												setContent(con,highlightindex);
												highlightindex=-1;
												autonode.hide();
											}
										);
									}	
								);    //each

								//当返回的数据长度大于0才显示
								if(wordNodes.length>0){
									autonode.show();
								}else{
									autonode.hide();
								}
							}
							,"xml")    //post
							,400);    //settimeout
					}else{
						autonode.hide();
						highlightindex=-1;
					}
				}else{
					//获得返回框中的值
					var rvalue=$("#auto").children("div");
					//上下键
					if(mykeyCode==38||mykeyCode==40){
						//向上
						if(mykeyCode==38){
							if(highlightindex!=-1){
								setBkColor(rvalue,highlightindex,"white");
								highlightindex--;
							}
							if(highlightindex==-1){
								setBkColor(rvalue,highlightindex,"white");
								highlightindex=rvalue.length-1;
							}
							setBkColor(rvalue,highlightindex,"#ADD8E6");
							setContent(rvalue,highlightindex);
						}
						//向下
						if(mykeyCode==40){
							if(highlightindex!=rvalue.length){
								setBkColor(rvalue,highlightindex,"white");
								highlightindex++;
							}
							if(highlightindex==rvalue.length){
								setBkColor(rvalue,highlightindex,"white");
								highlightindex=0;
							}
							setBkColor(rvalue,highlightindex,"#ADD8E6");
							setContent(rvalue,highlightindex);
						}
					}
					//回车键
					if(mykeyCode==13){
						if(highlightindex!=-1){
							setContent(rvalue,highlightindex);
							highlightindex=-1;
							autonode.hide();
						}else{
							alert($("#content").val());
						}
					}
				}
			}
		);//键盘抬起

		//当文本框失去焦点时的做法
		inputItem.focusout(
			function(){
				//隐藏提示框
				autonode.hide();
			}	
		);
	}
);//reday

 index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>文本自动提示补全功能</title>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<link rel="stylesheet" type="text/css"
			href="<%=basePath%>css/styles.css">
		<script type="text/javascript" language="javascript" charset="gb2312"
			src="<%=basePath%>js/jquery.js">
</script>
		<script type="text/javascript" language="javascript" charset="gb2312"
			src="<%=basePath%>js/autopromot.js">
</script>
	</head>

	<body>
		自动提示:
		<!-- autocomplete防止一些浏览器的自动提示完成功能 -->
		<input type="text" name="content" id="content" autocomplete="off" />
		<input type="button" id="button" name="button" value="提交" onclick="" />
		<div id="auto">

		</div>
		<br />
		<p>
			药家鑫案死者丈夫称坚持死刑并非全为以命抵命
		</p>

	</body>
</html>
 
分享到:
评论

相关推荐

    asp+ajax+json医生预约系统源码和数据库

    【程序老媛出品,必属精品,亲测校正,质量保证】 资源名:asp+ajax+json医生...源码说明: asp ajax json医生预约系统,此demo详细介绍了ajax,json的实例应用,适合新手学习借鉴 适合人群:新手及有一定经验的开发人员

    ajax+json+ashx实现下拉列表三级联动.rar

    本项目“ajax+json+ashx实现下拉列表三级联动”旨在利用jQuery、Ajax以及ASHX处理程序来创建这样一个功能。 首先,jQuery是一个强大的JavaScript库,它的易用性和丰富的API使得处理DOM操作、事件绑定、动画效果以及...

    easyui+ajax+json+servlet实现用户登录注册简单demo

    这个“easyui+ajax+json+servlet实现用户登录注册简单demo”旨在为初学者提供一个理解这些技术实际应用的平台。 首先,EasyUI是一个基于jQuery的轻量级前端框架,它提供了丰富的UI组件,如表格、表单、对话框等,...

    c3p0+dbUtils+Ajax+Json+Jquery实现【增删改查】Demo

    - 前端接收到响应后,Jquery解析Json数据,并根据结果更新页面(如显示操作成功提示或错误信息,或者自动加载新数据)。 此外,项目还包含了数据库备份文件,这可能是为了方便用户快速恢复到初始状态,或者便于其他...

    ajax+json+ashx实现界面漂亮的搜索功能.rar

    标题 "ajax+json+ashx实现界面漂亮的搜索功能.rar" 描述的是一个使用Ajax技术、JSON数据格式以及ASP.NET中的ASHX(HTTP Handler)来构建的高效、美观的搜索功能。这一实现方式允许用户在不刷新整个页面的情况下,...

    Servlet+Ajax+JSON用户账号密码登录验证Demo

    导入项目进eclipse,启动...然后访问:http://localhost:8080/yuansheng_ajax_login_demo/login.jsp 1.没有连接数据库,用户密码的数据为自定义的Map 2.使用简单的Servlet跳转 3.可按照Map中的数据 在前端 输入进行验证

    Jquery+JSON+REST WCF DEMO

    **jQuery + JSON + REST WCF DEMO 知识点详解** 在IT行业中,开发Web应用程序时,经常会使用到jQuery、JSON、RESTful API以及WCF(Windows Communication Foundation)等技术。"Jquery+JSON+REST WCF DEMO"是一个...

    ajax+springmvc+json

    这个小demo的标题“ajax+springmvc+json”表明它是一个用于展示这三者如何协同工作的实例。下面我们将详细探讨这三个关键概念及其相互间的整合。 首先,Ajax是一种前端技术,它允许网页在不重新加载整个页面的情况...

    spring+mybatis框架,json,ajax学习demo代码

    这个"spring+mybatis框架,json,ajax学习demo代码"文件夹中的内容很可能是为了帮助初学者或者开发者理解如何在实际项目中集成这些技术。下面将详细介绍这些知识点: 1. **Spring MVC**:Spring MVC是Spring框架的一...

    jquery ajax servlet json简单demo

    【Demo流程】在这个"jquery ajax servlet json简单demo"中,我们可以预期以下流程: 1. 客户端(浏览器)的JavaScript代码使用jQuery的AJAX函数发起请求,请求可能包含一些参数,格式化为JSON。 2. 请求被发送到...

    Extjs Grid+apsx+json Demo

    在"Extjs Grid+asp.net+json Demo"中,我们将探讨如何结合ExtJS Grid、ASP.NET以及JSON来实现一个数据展示和交互的示例。 首先,让我们理解每个组成部分的作用: 1. **ExtJS Grid**:这是一个客户端的组件,它使用...

    Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输

    本项目"Java后台服务器Maven+SpringMVC+Ajax+@RequestBody+Json传输"就是一个很好的示例,它展示了如何利用这些技术进行前后端的数据交互。下面我们将详细探讨这些知识点。 首先,`Maven`是Java项目管理工具,它...

    最简单的:Struts2+JSON+JQUERY+AJAX 完整DEMO源代码

    Struts2、JSON、JQUERY和AJAX是Web开发中常用的技术栈,它们结合使用...通过学习和理解这个DEMO,开发者可以了解到如何将Struts2、JSON、JQUERY和AJAX结合使用,实现前后端数据交互,这对于提升Web开发技能非常有帮助。

    在.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图包含网页静态demo

    本项目利用Highcharts库、Ajax异步请求以及Json数据格式,实现了动态的曲线图、柱状图和饼图,为数据报表提供了一种直观且吸引人的呈现方式。 Highcharts是一个强大的JavaScript图表库,它支持多种图表类型,如折线...

    fastjson+ajax+sppringmvc前后使用json传值的demo

    本示例“fastjson+ajax+sppringmvc前后使用json传值的demo”展示了如何利用这些技术进行高效的数据传输。以下是相关知识点的详细说明: 1. JSON:JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于...

    Echarts+ajax+java+mysql实现饼图+折线图+柱状图

    在这个案例中,Java后端可能使用了Servlet或Spring Boot框架来接收前端的AJAX请求,执行SQL查询,从MySQL数据库中获取数据,然后将这些数据以JSON格式返回给前端。 4. **MySQL数据库**: MySQL是一个广泛使用的...

    Ajax_Json_jQuery详细Demo

    综上所述,"Ajax_Json_jQuery详细Demo"包含了一系列关于这三者如何协同工作的实例,对初学者来说是极好的学习资源。通过这些示例,你可以了解如何使用jQuery简化Ajax调用,以及如何处理JSON数据,从而更好地构建交互...

    json +jquery DEMO AJAX

    在本DEMO中,我们将探讨如何结合JSON和jQuery实现AJAX交互。 首先,了解jQuery的AJAX方法。主要有`$.ajax()`, `$.get()`, `$.post()`等。其中,`$.ajax()`是最全面的,可以配置各种选项,如URL、类型(GET或POST)...

    bootstrap+ssm+ajax+返回json数据

    标题 "bootstrap+ssm+ajax+返回json数据" 涉及到的是一套常见的Web开发技术栈,包括Bootstrap、SSM(Spring、SpringMVC、MyBatis)框架以及Ajax和JSON数据交换。以下是对这些知识点的详细解释: 1. **Bootstrap**:...

    YouTube Dynamic AJAX - JSON Search API Demo

    【标题】"YouTube Dynamic AJAX - JSON Search API Demo" 涉及的是利用AJAX(Asynchronous JavaScript and XML)技术和YouTube的JSON(JavaScript Object Notation)搜索API来创建一个动态的视频搜索应用程序。...

Global site tag (gtag.js) - Google Analytics