JSON-智能搜索框

json的初步认识

关于智能搜索框慕课链接:http://www.imooc.com/learn/678

  • 一:前端主要代码

1:界面搜索框

<div id="mydiv">
		<input type="text" id="keyword" style="width: 300px;"
			onkeyup="getInputElement()"> <input type="button" id="sub"
			value="百度一下">
		<div id="div2">
			<table border="0" bgcolor="#FFFAFA" id="tab" cellpadding="0" cellspacing="0" width="300px;">
				<tbody id="tabtb">
				</tbody>
			</table>
		</div>
</div>

2:前端样式

<style type="text/css">
#mydiv {
	position: absolute;
	left: 50%;
	top: 50%;
	margin-left: -200px;
	margin-top: -200px;
}
</style>

3:前端js

  • 主要函数
var url = "myajax?keyword=" + escape(contents.value);
				xhr.open("GET", url, true);
				xhr.send(null);
  • ajax状态码
    0 - (未初始化)还没有调用send()方法
    1 - (载入)已调用send()方法,正在发送请求
    2 - (载入完成)send()方法执行完成,已经接收到全部响应内容
    3 - (交互)正在解析响应内容
    4 - (完成)响应内容解析完成,可以在客户端调用了
  • http响应状态码
    1 ** 信息,服务器收到请求,需要请求者继续执行操作
    2 ** 成功,操作被成功接收并处理
    3 ** 重定向,需要进一步的操作以完成请求
    4 ** 客户端错误,请求包含语法错误或无法完成请求
    5 ** 服务器错误,服务器在处理请求的过程中发生了错误
  • *js代码
<script type="text/javascript">
    //声明全局XMLHttpRequest-->xhr
	var xhr;
	function getInputElement() {
		var contents = document.getElementById("keyword");
		if (contents.value == "")
			return;
		else {
			xhr = getMyXHR();
			if (xhr != null) {
				//调用回调函数,判断后端的数据交互状态
				xhr.onreadystatechange = state_Change;
				//新建url,escape:防止中文乱码
				var url = "myajax?keyword=" + escape(contents.value);
				xhr.open("GET", url, true);
				xhr.send(null);
			} else {
				alert("Your browser does not support XMLHTTP.");
			}
		}
	}
	//创建XHR对象,使其对服务器传值
	function getMyXHR() {
		var xmlhttp;
		if (window.XMLHttpRequest) {// code for all new browsers
			xmlhttp = new XMLHttpRequest();
		} else if (window.ActiveXObject) {// code for IE5 and IE6
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return xmlhttp;
	}
	//回调函数,在后端代码相应之后调用
	function state_Change() {
		if (xhr.readyState == 4) {// 4 = "loaded"
			if (xhr.status == 200) {// 200 = OK
				var result = xhr.responseText;
				//var json = JSON.parse("(" + result + ")");
				var json = eval("(" + result + ")");
				setContexts(json);
			} else {
				alert("Problem retrieving XML data");
			}
		}
	}

	//设置内容显示框
	function setContexts(contents) {
		clearData();
		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");
			tr.setAttribute("border", "0");
			tr.setAttribute("bgcolor", "#FFFAFA");
			//为鼠标滑动增加事件
			td.onmouseover = function() {
				this.className = 'mouseOver';
			}
			td.onmouseout = function() {
				this.className = 'mouseOut';
			}
			var text = document.createTextNode(nextNode);
			//在td中中附加text
			td.appendChild(text);
			//在tr中附加td
			tr.appendChild(td);
			//在tbody中附加tr
			var tab = document.getElementById("tabtb").appendChild(tr);
		}
	}
	//清除数据
	function  clearData() {
		var tab = document.getElementById("tabtb");
		var size=tab.childNodes.length;
		for(var i=size-1;i>=0;i--)
			tab.removeChild(tab.childNodes[i]);
	}
</script>
  • 4:全部前端代码
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
#mydiv {
	position: absolute;
	left: 50%;
	top: 50%;
	margin-left: -200px;
	margin-top: -200px;
}
.mouseOver
{
  background-color: #EDEDED;
}
.mouseOut
{
  background-color: #FFF;
}
</style>
</head>
<body>
	<div id="mydiv">
		<input type="text" id="keyword" style="width: 300px;"
			onkeyup="getInputElement()"> <input type="button" id="sub"
			value="百度一下">
		<div id="div2">
			<table border="0" bgcolor="#FFFAFA" id="tab" cellpadding="0" cellspacing="0" width="300px;">
				<tbody id="tabtb">
				</tbody>
			</table>
		</div>
	</div>
</body>
<script type="text/javascript">
    //声明全局XMLHttpRequest-->xhr
	var xhr;
	function getInputElement() {
		var contents = document.getElementById("keyword");
		if (contents.value == "")
			return;
		else {
			xhr = getMyXHR();
			if (xhr != null) {
				//调用回调函数,判断后端的数据交互状态
				xhr.onreadystatechange = state_Change;
				//新建url,escape:防止中文乱码
				var url = "myajax?keyword=" + escape(contents.value);
				xhr.open("GET", url, true);
				xhr.send(null);
			} else {
				alert("Your browser does not support XMLHTTP.");
			}
		}
	}
	//创建XHR对象,使其对服务器传值
	function getMyXHR() {
		var xmlhttp;
		if (window.XMLHttpRequest) {// code for all new browsers
			xmlhttp = new XMLHttpRequest();
		} else if (window.ActiveXObject) {// code for IE5 and IE6
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		return xmlhttp;
	}
	//回调函数,在后端代码相应之后调用
	function state_Change() {
		if (xhr.readyState == 4) {// 4 = "loaded"
			if (xhr.status == 200) {// 200 = OK
				var result = xhr.responseText;
				//var json = JSON.parse("(" + result + ")");
				var json = eval("(" + result + ")");
				setContexts(json);
			} else {
				alert("Problem retrieving XML data");
			}
		}
	}

	//设置内容显示框
	function setContexts(contents) {
		clearData();
		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");
			tr.setAttribute("border", "0");
			tr.setAttribute("bgcolor", "#FFFAFA");
			//为鼠标滑动增加事件
			td.onmouseover = function() {
				this.className = 'mouseOver';
			}
			td.onmouseout = function() {
				this.className = 'mouseOut';
			}
			var text = document.createTextNode(nextNode);
			//在td中中附加text
			td.appendChild(text);
			//在tr中附加td
			tr.appendChild(td);
			//在tbody中附加tr
			var tab = document.getElementById("tabtb").appendChild(tr);
		}
	}
	//清除数据
	function  clearData() {
		var tab = document.getElementById("tabtb");
		var size=tab.childNodes.length;
		for(var i=size-1;i>=0;i--)
			tab.removeChild(tab.childNodes[i]);
	}
</script>
</html>
  • 二:servlet的web配置
  • web配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">
	<display-name>struts-web</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
     
     <servlet>
        <servlet-name>myajax</servlet-name>
        <servlet-class>com.control.MyAjax</servlet-class>
     </servlet>
      <servlet-mapping>
         <servlet-name>myajax</servlet-name>
         <url-pattern>/myajax</url-pattern>
      </servlet-mapping>
</web-app>
  • 三:后端代码

-servlet代码
1:放入示例数据代码

	private static List<String> list = new ArrayList<String>();
	static {
		for (int i = 0; i < 10; i++) {
			list.add("a" + i);
		}
		for (int i = 0; i < 5; i++) {
			list.add("b" + i);
		}

	}

2:重写doGet方法(也可以重写doPost方法,取决于js时的运用)

@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String keyword = req.getParameter("keyword");
		List<String> result=getDate(keyword);
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		resp.getWriter().write(JSONArray.fromObject(result).toString());
	}

3:数据的判断填充

public List<String> getDate(String keyword)
{
	List<String> tmpList=new ArrayList<String>();
	for (int i = 0; i < list.size(); i++) {
			if(list.get(i).contains(keyword))
				tmpList.add(list.get(i));
	}
	return tmpList;
}

4:全部后端代码

package com.control;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

public class MyAjax extends HttpServlet {
	private static List<String> list = new ArrayList<String>();
	static {
		for (int i = 0; i < 10; i++) {
			list.add("a" + i);
		}
		for (int i = 0; i < 5; i++) {
			list.add("b" + i);
		}

	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		String keyword = req.getParameter("keyword");
		List<String> result=getDate(keyword);
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		resp.getWriter().write(JSONArray.fromObject(result).toString());
	}
	public List<String> getDate(String keyword)
	{
		List<String> tmpList=new ArrayList<String>();
		for (int i = 0; i < list.size(); i++) {
			if(list.get(i).contains(keyword))
				tmpList.add(list.get(i));
		}
		return tmpList;
	}
}

json 依赖jar包

http://www.cr173.com/soft/64964.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值