Ajax学习之------>Ajax和Json实现无限下拉框联动(上)


 

init.jsp页面,直接跳转到InitShengServlet2这个servlet初始化省份

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<jsp:forward page="/InitShengServlet2"></jsp:forward>

 

/**

该servlet初始化完后跳转到list4.jsp

*/
InitShengServletInitShengServlet

package com.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dao.CityDao;
@SuppressWarnings("serial")
public class InitShengServlet2 extends HttpServlet {
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		CityDao cityDao=new CityDao();
		request.setAttribute("shengList", cityDao.findByParentId(0));
		request.getRequestDispatcher("list4.jsp").forward(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

 

/**

数据库操作的工具类

*/

package com.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBManager {
	public Connection getCon() {
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			return DriverManager.getConnection(
					"jdbc:sqlserver://127.0.0.1:1433;DatabaseName=cityManager",
					"sa", "sasa");
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	// 查询结果
	public ResultSet query(String sql, Object... p) {
		Connection con = getCon();
		PreparedStatement ps = null;
		try {
			 ps= con.prepareStatement(sql);
			if (p != null)
				for (int i = 0; i < p.length; i++) {
					ps.setObject(i + 1, p[i]);
				}
			return ps.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}

	// 增删改
	public int update(String sql, Object... p) {
		Connection con = getCon();
		PreparedStatement ps=null;
		try {
			 ps= con.prepareStatement(sql);
			if (p != null)
				for (int i = 0; i < p.length; i++) {
					ps.setObject(i + 1, p[i]);
				}
			return ps.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("增删改失败");
		}finally{
			this.closePrepStmt(ps);
			this.closeConnection(con);
		}

	}
	//关闭Connection
	public void closeConnection(Connection con) {
		try {
			if (con != null)
				con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//关闭PreparedStatement
	public void closePrepStmt(PreparedStatement ps) {
		try {
			if (ps != null)
				ps.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//关闭ResultSet
	public void closeResultSet(ResultSet rs) {
		try {
			if (rs != null)
				rs.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

/** 处理根据ID找城市*/

package com.dao;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.db.DBManager;
import com.vo.City;

public class CityDao {
	public List<City> findByParentId(int parentId){
		String sqlString="select cityId,cityName,parentId,context from city where parentId="+parentId;
		DBManager dbManager=new DBManager();
		ResultSet rs=dbManager.query(sqlString);
		List<City> cities=new ArrayList<City>();
		try {
			while(rs.next()){
				cities.add(new City(rs.getInt("cityId") ,rs.getString("cityName") ,rs.getString("context")));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return cities;
	}
}

 list4.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<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="styles.css">
	-->
		<script type="text/javascript"
			src="${pageContext.request.contextPath}/js/console.js"></script>
		<script type="text/javascript"
			src="${pageContext.request.contextPath}/js/loading.js"></script>
		<script type="text/javascript">
	var xmlHttpRequest = createXmlHttpRequest();

	var tagId2;
	//发送请求查找指定省份ID的市区
	function findShi(shengId,tagId) {
		tagId2=tagId;
		var isDelete=false;
		var sons=document.getElementById(tagId).childNodes;
		for ( var i = (sons.length-1); i >=0; i--) {
			if(sons[i].nodeName.toUpperCase()=="UL"){
				sons[i].parentNode.removeChild(sons[i]);
				isDelete=true;
			}
		}
		if(isDelete) return;
		var url = "${pageContext.request.contextPath}/getShiServlet2?shengId="
				+ shengId;
		xmlHttpRequest.open("GET", url, true);
		//关联好回调函数
		xmlHttpRequest.onreadystatechange = shiCallback;
		//清除缓存方法   加入请求头
		xmlHttpRequest.setRequestHeader("If-Modified-Since", "0");
		//真正向服务器端发送数据
		xmlHttpRequest.send(null);
		return false;
	}

	//找到指定省份ID的市区后给市区的节点增加值
	function shiCallback() {
		if (xmlHttpRequest.readyState == 4) {
			debug("xmlHttpRequest.readyState==" + xmlHttpRequest.readyState);
			debug("xmlHttpRequest.status ==" + xmlHttpRequest.status);
			if (xmlHttpRequest.status == 200) {
				var s = xmlHttpRequest.responseText;
				debug("收到服务器回应==" + s);
				var shis = eval(s);
				if(shis.length==0){
					debug("--->shis.length==0");
					return;
				}
				var pli=document.getElementById(tagId2);
				var nul=document.createElement("ul");
				for ( var i = 0; i <shis.length; i++) {
					var nli=document.createElement("li");
					nli.id="tag"+shis[i].cityId;
					//注意转移双引号
					nli.innerHTML="<a href='#' onclick='return findShi("+shis[i].cityId+",\"tag"+shis[i].cityId+"\");'>"+shis[i].cityName+"</a>";
					nul.appendChild(nli);
				}
				pli.appendChild(nul);
			}
		}
	}
</script>
	</head>

	<body>
		<h1>
			无限下拉框联动
		</h1>
		<h3>
			您来自哪里?
		</h3>
		<hr>
		<ul>
			<c:forEach items="${requestScope.shengList}" var="sheng">
				<li id="tag${sheng.cityId}">
					<a href="#"
						onclick="return findShi(${sheng.cityId},'tag${sheng.cityId}');">
						${sheng.cityName}</a>
				</li>
			</c:forEach>
		</ul>
		<hr>
	</body>
</html>

package com.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import com.dao.CityDao;
import com.vo.City;

public class getShiServlet2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		int shengId=Integer.parseInt(request.getParameter("shengId"));
		CityDao cityDao=new CityDao();
		List<City> cities=cityDao.findByParentId(shengId);
		if(cities!=null){
			//声明 JSONArray
			JSONArray jsonArray=new JSONArray(cities);
			//生产字符串
			out.print(jsonArray.toString());
			System.out.print(jsonArray.toString());
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

 




				
时间: 2024-12-03 12:52:54

Ajax学习之------&gt;Ajax和Json实现无限下拉框联动(上)的相关文章

JavaScript Ajax Json实现上下级下拉框联动效果实例代码_javascript技巧

最近尝试做出一个部门和人员的下拉框联动功能,部门和人员的对应关系是1:N 复制代码 代码如下: <div class="forntName">部门</div> <div class="inpBox"> <select  name="department" id="department"  onchange="change();" style="width:

基于Ajax实现下拉框联动显示数据_AJAX相关

公司做项目的时候,需要用到下拉框联动显示数据的功能,索性利用Ajax来实现,看到时间比较充裕,就没去找demo自己去想方法写了.纯自己的想法,有些可能比较弱智,希望不要见笑. 页面中的两个下拉列表框: <tr> <td style="width: 130px"> 所在学院:</td> <td style="width: 100px"> <select id="college" style=&q

基于Ajax实现下拉框联动显示数据

公司做项目的时候,需要用到下拉框联动显示数据的功能,索性利用Ajax来实现,看到时间比较充裕,就没去找demo自己去想方法写了.纯自己的想法,有些可能比较弱智,希望不要见笑. 页面中的两个下拉列表框: <tr> <td style="width: 130px"> 所在学院:</td> <td style="width: 100px"> <select id="college" style=&q

AJAX实现下拉框联动

想当年,为了实现三级联动,找个js高手些了N多代码才搞定,但是很慢,因为一次要将所有的选项取来,然后排序,查找动态显示. 现在使用AJAX真是太方便了,下面做了个简单例子,实现下拉框的省市联动,效果图如下: 实现代码: a.html <html> <body> <script language="JavaScript"> var req = null; function test() { var province = document.all(&qu

Jquery 结合Json控制Select下拉框

  Code<html><head><title>jquery 操作 Select</title><script type="text/javascript" src="jquery-1.2.6.min.js"></script> <script type="text/javascript">$(document).ready(function(){ var oS

数据-ajax 根据一个下拉框的值的不同 另一个下拉框对应显示的值也不同

问题描述 ajax 根据一个下拉框的值的不同 另一个下拉框对应显示的值也不同 图片就是这样的,项目的类别有商户和银行两种,我要根据选择商户还是银行,让下边对应的选择已有商户 的下拉框中显示不同的数据,数据都需要通过后台去数据库里查的. 这个是不是要ajax啊?谁能告诉告诉我怎么写 .急急急 ..在线等好心人..... 解决方案 html代码 <tr> <td style="width:15%"> 一级 </td> <td style="

利用ProtoType框架完成的一个下拉框(asp:DropDownList)联动的AJAX例子

ajax|下拉 最近终于有时间研究研究AJAX了.看了一些AJAX的介绍.用ProtoType框架完成的一个下拉框(asp:DropDownList)联动的AJAX的小例子,和初学者分享一下. 代码下载 <script language="javascript" type="text/javascript" ><!-- function goCity(){        var url = "AreaHandler.ashx";

利用ProtoType框架完成的一个下拉框(asp:DropDownList)联动的AJAX例子

最近终于有时间研究研究AJAX了.看了一些AJAX的介绍. 用ProtoType框架完成的一个下拉框(asp:DropDownList)联动的AJAX的小例子,和初学者分享一下. <script language="javascript" type="text/javascript" > <!-- function goCity() { var url = "AreaHandler.ashx"; var father= $F('

ajax级联下拉框

问题描述 学校已经是动态读取了,根据学校读取年级,根据年级读取到班级!是从数据库里读的!ajax访问即可!求大神指点一二! 解决方案 解决方案二:在学校的onchange事件中,发送ajax请求啊.解决方案三:首先第一个下拉框选中一条数据以后,出发onchange时间,利用Ajax去后台根据你选的数据查询数据,然后拼字符串,再在前台将option拼出来..这是思路,具体的实现代码网上有很多.解决方案四:2楼正解解决方案五:二楼正解解决方案六:楼上都是正解解决方案七:5楼才是正解解决方案八:这就是