`
l万lin
  • 浏览: 28502 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

ajax+java+sql server2005 省、市、区联动[源码]

    博客分类:
  • ajax
阅读更多

初学ajax之省市联动demo.
city.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>省市联动</title>
    <script type="text/javascript" src="js/city/city.js"></script>
  </head>
  <body>
    <h3>ajax+java 省、市、区联动</h3>
    <span style="color:red;">请选择你现居地:</span>
    <select id="province" onchange="loadCity();"></select>
    <select id="city" onchange="loadDistrict();"></select>
    <select id="district"></select>
  </body>
</html>

 

 city.js:

window.onload = loadProvince;
var ajaxObject;
// 得到省
function loadProvince() {
	// 初始化
	setSelect("province", "null", "请选择省:");
	setSelect("city", "null", "请选择市:");
	setSelect("district", "null", "请选择区:");

	ajaxObject = getXMLHttpRequest();
	if (ajaxObject) {
		var openURL = document.URL + "city";
		var sendData = "type=getProvince";
		ajaxObject.open("POST", openURL, true);
		ajaxObject.setRequestHeader("Content-type",
				"application/x-www-form-urlencoded");
		ajaxObject.onreadystatechange = loadProvinceStatechange;
		ajaxObject.send(sendData);
	}
}
// 得到省回调函数
function loadProvinceStatechange() {
	if (ajaxObject.readyState == 4) {
		if (ajaxObject.status == 200) {
			var jsonStr = ajaxObject.responseText;
			var jsonObj = eval("(" + jsonStr + ")");
			for ( var i = 0; i < jsonObj.length - 1; i++) {
				var province = document.createElement("option");
				province.value = jsonObj[i].serialId;
				province.innerHTML = jsonObj[i].provinceName;
				$("province").appendChild(province);
			}
		}
	}
}
// 得到市
function loadCity() {
	if ($("province").value != "null") {
		ajaxObject = getXMLHttpRequest();
		if (ajaxObject) {
			var openURL = document.URL + "city";
			var province = $("province").value;
			var sendData = "type=loadCity&province=" + province;
			ajaxObject.open("POST", openURL, true);
			ajaxObject.setRequestHeader("Content-type",
					"application/x-www-form-urlencoded");
			ajaxObject.onreadystatechange = loadCityStatechange;
			ajaxObject.send(sendData);
		}
	} else {
		setSelect("city", "null", "请选择市:");
		setSelect("district", "null", "请选择区:");
	}
}
// 得到市回调函数
function loadCityStatechange() {
	if (ajaxObject.readyState == 4) {
		if (ajaxObject.status == 200) {
			var jsonStr = ajaxObject.responseText;
			var jsonObj = eval("(" + jsonStr + ")");
			setSelect("city", "null", "请选择市:");
			for ( var i = 0; i < jsonObj.length - 1; i++) {
				var city = document.createElement("option");
				city.value = jsonObj[i].serialId;
				city.innerHTML = jsonObj[i].cityName;
				$("city").appendChild(city);
			}
		}
	}
}
// 得到区 district
function loadDistrict() {
	if ($("city").value != "null") {
		ajaxObject = getXMLHttpRequest();
		if (ajaxObject) {
			var openURL = document.URL + "city";
			var city = $("city").value;
			var sendData = "type=loadDistrict&city=" + city;
			ajaxObject.open("POST", openURL, true);
			ajaxObject.setRequestHeader("Content-type",
					"application/x-www-form-urlencoded");
			ajaxObject.onreadystatechange = loadDistrictStatechange;
			ajaxObject.send(sendData);
		}
	} else {
		setSelect("district", "null", "请选择区:");
	}
}
// 得到区 callback function
function loadDistrictStatechange() {
	if (ajaxObject.readyState == 4) {
		if (ajaxObject.status == 200) {
			var jsonStr = ajaxObject.responseText;
			var jsonObj = eval("(" + jsonStr + ")");
			setSelect("district", "null", "请选择区:");
			for ( var i = 0; i < jsonObj.length - 1; i++) {
				var district = document.createElement("option");
				district.value = jsonObj[i].serialId;
				district.innerHTML = jsonObj[i].districtName;
				$("district").appendChild(district);
			}
		}
	}
}
// 得到 XMLHttpRequest对象
function getXMLHttpRequest() {
	var xmlHttp;
	try {
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		try {
			xmlHttp = new ActiveXObject("microsoft.XMLHTTP");
		} catch (e) {
			try {
				xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				window.alert("对不起,你的浏览器不支持ajax!");
				return false;
			}
		}
	}
	return xmlHttp;
}
// 初始化 select
function setSelect(s_id, s_value, s_innerHTML) {
	$(s_id).length = 0;
	var ele = document.createElement("option");
	ele.value = s_value;
	ele.innerHTML = s_innerHTML;
	$(s_id).appendChild(ele);
}
function $(id) {
	return document.getElementById(id);
}

 

City.java:

package com.city;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map.Entry;

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

public class City extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		String type = req.getParameter("type");
		String sql;
		String[] para;
		if ("getProvince".equals(type)) {
			// 得到省份
			sql = "select serialId,provinceName from fch_province";
			ArrayList<LinkedHashMap<String, Object>> provinces = (new SqlHelper())
					.sqlQuery(sql, null);
			String jsonProvinces = "";
			for (int i = 0; i < provinces.size(); i++) {
				HashMap<String, Object> hm = provinces.get(i);
				Iterator<String> iterator = hm.keySet().iterator();
				while (iterator.hasNext()) {
					String key = iterator.next();
					String value = hm.get(key).toString();
					// 编写 json
					if ("serialId".equals(key)) {
						jsonProvinces += "{\"" + key + "\":\"" + value + "\",";
					} else {
						jsonProvinces += "\"" + key + "\":\"" + value + "\"},";
					}
				}
			}
			jsonProvinces = "[" + jsonProvinces + "{\"none\":\"none\"}]";
			resp.getWriter().print(jsonProvinces);
			// System.out.println(jsonProvinces);
		} else if ("loadCity".equals(type)) {
			// 得到城市
			sql = "select serialId,cityName from fch_city where cityUpIdNum=?";
			para = new String[] { req.getParameter("province") };
			ArrayList<LinkedHashMap<String, Object>> cities = (new SqlHelper())
					.sqlQuery(sql, para);
			String jsonCities = "";
			// 遍历
			for (int i = 0; i < cities.size(); i++) {
				HashMap<String, Object> hm = cities.get(i);
				for (Entry<String, Object> city : hm.entrySet()) {
					// json String
					String key = city.getKey();
					String value = city.getValue().toString();
					if ("serialId".equals(key)) {
						jsonCities += "{\"" + key + "\":\"" + value + "\",";
					} else {
						jsonCities += "\"" + key + "\":\"" + value + "\"},";
					}
				}
			}
			jsonCities = "[" + jsonCities + "{\"none\":\"none\"}]";
			resp.getWriter().print(jsonCities);
			// System.out.println(jsonCities);
		} else if ("loadDistrict".equals(type)) {
			// 根据省的districtUpIdNum得到 serialId,districtName
			sql = "select serialId,districtName from fch_district where districtUpIdNum=?";
			para = new String[] { req.getParameter("city") };
			ArrayList<LinkedHashMap<String, Object>> districts = (new SqlHelper())
					.sqlQuery(sql, para);
			String jsonDistrict = "";
			for (int i = 0; i < districts.size(); i++) {
				HashMap<String, Object> hm = districts.get(i);
				for (Entry<String, Object> district : hm.entrySet()) {
					String key = district.getKey();
					String value = district.getValue().toString();
					if ("serialId".equals(key)) {
						jsonDistrict += "{\"" + key + "\":\"" + value + "\",";
					} else {
						jsonDistrict += "\"" + key + "\":\"" + value + "\"},";
					}
				}
			}
			jsonDistrict = "[" + jsonDistrict + "{\"none\":\"none\"}]";
			resp.getWriter().print(jsonDistrict);
			// System.out.println(jsonDistrict);
		}
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}
}

 

其他代码:详见源码..

 

 

 

效果图:



 

 

 

 

源代码下载

0
0
分享到:
评论

相关推荐

    ASP.NET源码——蓝驿轨迹ajax+xml实现省市区无刷新联动源码.zip

    【标题】"ASP.NET源码——蓝驿轨迹ajax+xml实现省市区无刷新联动源码.zip"揭示了这个压缩包中的内容是关于ASP.NET框架下,使用Ajax和XML技术实现的一个省市区联动选择功能的源代码。这个功能常见于网页表单中,允许...

    ASP.NET-[其他类别]蓝驿轨迹ajax+xml实现省市区无刷新联动源码.zip

    【压缩包子文件的文件名称】"ASP.NET-[其他类别]蓝驿轨迹ajax+xml实现省市区无刷新联动源码_citychange.rar"表明主代码文件或资源可能在这个RAR压缩包内,名为“_citychange”,这可能是一个ASP.NET的Web应用程序...

    三级联动java源码

    这个机制常常用于地址选择,例如省、市、区/镇的逐级下拉菜单,用户依次选择上级区域后,下级区域会根据上一级的选择动态加载数据。这种效果在网站或应用程序中常见,可以提高用户体验,避免一次性加载大量数据。 ...

    JSP+AJAX实现两级select联动 代码

    JSP(JavaServer Pages)和AJAX(Asynchronous JavaScript and XML)是两种常见的技术,用于构建这种类型的Web应用程序。本篇将深入探讨如何利用JSP和AJAX实现两级select联动的效果,以及这种效果在实际应用中的价值...

    AJAX版省市区三级联动下拉框

    AJAX版省市区三级联动下拉框 使用说明: 1、在sql server 2000 中建立一个库:asptest 2、在sql server 2000 中建立一个帐号:asptest,密码:asptest 3、把压缩包中的 asptest 恢复到库 asptest 中,...

    Ajax三级联动和无刷新分页源码

    Ajax三级联动和无刷新分页源码 数据库是用的 51aspx的数据库(含全国完整省市区的数据) 自己写的第2个 ajax例子 3联动+无刷新分页(no altas) 无刷新分页 有点bug 只需要把 js/xmlhttp.js 里面的 的标签 里的属性 ...

    jQuery+ashx完成的省市区联动源码

    【jQuery+ashx完成的省市区联动源码】是一个典型的前端与后端交互实现的地理信息选择功能。这个源码示例主要展示了如何利用jQuery库和ASHX(HTTP Handler)在ASP.NET环境中实现省份、城市、区县三级联动的效果。在...

    三级联动源码以及数据库.rar

    在这个“三级联动源码以及数据库.rar”压缩包中,我们主要会涉及到以下几个关键知识点: 1. **Servlet**:Servlet是Java Web开发中的核心组件,它主要用于处理HTTP请求,向客户端返回响应。在本项目中,Servlet扮演...

    ASP.NET源码——Ajax三级联动和无刷新分页源码.zip

    这个压缩包"ASP.NET源码——Ajax三级联动和无刷新分页源码.zip"提供了两个关键功能的实现:Ajax三级联动和无刷新分页。 **Ajax三级联动**是Web开发中的常见交互模式,主要用于提升用户体验。在传统的网页交互中,...

    ajax三级联动(省份地区)无刷新源码

    这个功能通常被称为“三级联动”,因为它涉及到省、市、区三个级别的下拉菜单,当用户在一级菜单(省份)中选择一个选项时,二级菜单(地区)会根据选择自动填充,同样,如果二级菜单有更细的级别,三级菜单也会相应...

    ajax 异步实现两级联动下拉列表和输入提示

    &lt;%@ page import="java.sql.*" %&gt; String country = request.getParameter("country"); Connection conn = ...; // 数据库连接 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(...

    全国省市区三级联动(PHP+jQuery附数据库)

    1. 在SQL部分,需要设计一个数据库表来存储省市区的数据,可能包含以下字段:`id`(主键)、`code`(编码,如省级代码、市级代码、区县级代码)、`name`(名称)等。 2. 查询语句可能涉及多级关联,例如,根据省份...

    ASP无限级联动菜单源码[80端口原创]

    ASP(Active Server Pages)是一种微软开发的服务器端脚本语言,常用于构建动态网页。在ASP中实现无限级联动菜单,通常涉及到数据库操作、递归算法以及JavaScript或jQuery的前端交互技术。 首先,无限级联动菜单是...

    ASP实例开发源码—ajax n级联动数据库版(带后台和省市县数据库) utf-8.zip

    这个实例开发源码是基于ASP技术实现的AJAX(Asynchronous JavaScript and XML)n级联动数据库版本,它包含了后台管理和省市县数据库。AJAX允许在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容,提供了...

    ASP源码—ajax n级联动数据库版(带后台和省市县数据库) utf-8.zip

    这种联动效果常见于地区选择,例如省、市、县的三级选择,用户在选择一级地区时,二级地区会自动更新,选择二级时,三级地区也会随之变化,无需刷新整个页面,提高了用户体验。 【AJAX技术解析】 AJAX并非一种单一...

    省市区镇四级联动附代码和数据库

    在IT行业中,"省市区镇四级联动"是一个常见的地理信息系统(GIS)或用户界面设计概念,主要用于实现地址选择功能。这种联动通常是通过下拉菜单或选择框的方式,让用户依次选择省份、城市、区县和城镇,以精确地指定...

    ajax无刷新三级联动

    【Ajax无刷新三级联动】是一种常见的前端交互技术,主要用于网页数据的动态加载,无需刷新整个页面即可实现数据的联动更新。这种技术的核心是利用Ajax(Asynchronous JavaScript and XML)异步通信,配合JavaScript...

Global site tag (gtag.js) - Google Analytics