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,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,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,response);
	}

}

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

  1. three.js模拟实现太阳系行星体系功能

    这篇文章主要介绍了three.js模拟实现太阳系行星体系功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

  2. HTML5 WebSocket实现点对点聊天的示例代码

    这篇文章主要介绍了HTML5 WebSocket实现点对点聊天的示例代码的相关资料,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  3. HTML5、Select下拉框右边加图标的实现代码(增进用户体验)

    这篇文章主要介绍了HTML5、Select下拉框右边加图标的实现代码,深度美化页面增进用户体验效果,需要的朋友可以参考下

  4. HTML5页面无缝闪开的问题及解决方案

    这篇文章主要介绍了HTML5页面无缝闪开方案,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. ios – 为什么,将nil作为参数从Objc C发送到swift类初始化器,用新对象替换nil参数

    除非属性本身被声明为nonnull:

  6. ios – 在Swift中对MKCircle进行子类化

    我想通过添加另一个String属性来继承MKCircle,我们称之为“代码”.这个属性不是可选的和常量的,所以我必须从初始化器设置它,对吧?有没有办法定义一个单一的便利初始化器,在这种情况下需要3个参数?本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  7. ios – AVAudioPlayer不再使用Swift 2.0/Xcode 7 beta

    对于我的iPhone应用程序中的vartestAudio声明,我在这里收到错误“调用可以抛出,但错误不能从属性初始化程序中抛出”当我转到Xcode7测试版时,就发生了这种情况.如何在Swift2.0中使用此音频剪辑?

  8. ios – 斯威夫特.在初始化所有存储的属性之前在方法调用中使用’self’

    解决方法在初始化所有非可选实例变量之前,您无法在self上调用方法.有几种方法可以解决这个问题.>将属性更改为选项或隐式解包选项(不建议)>使buildCircle()方法静态或只是一个在文件中运行并为所有圆圈调用addSubview()在所有属性初始化并且您调用之后super.init()等等.你必须避免在自己之前打电话给自己class已初始化.

  9. ios – Objective-C警告未找到超类“-init”的指定的初始化程序的方法覆盖

    我在一个应用程序中清理警告,我收到了两次这个警告对于这行代码和这一行我相当新的Objective-C和谷歌这个警告,只是不明白的解决方案我的问题是如何摆脱这些警告?

  10. ios – UICollectionView不能使用UISearchController?

    在WWDC2014年的“AInsideInsidePresentationControllers”中,演示者展示了如何在UITableView中设置UISearchController.他们通过设置searchController的searchBar框架,然后将其设置为tableView的tableHeaderView来实现.不幸的是,UICollectionView没有相当于tableHeade

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部