初学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); } }
?
其他代码:详见源码..
?
?
?
效果图:
?
?
?
?
ajax+java+sql server2005 省、市、区联动[源码]
原文:http://ssycssj.iteye.com/blog/2181865