AJAX应用案例--基于mysql,以POST方式,完成三级级下拉联动【省份-城市-区域】

前端之家收集整理的这篇文章主要介绍了AJAX应用案例--基于mysql,以POST方式,完成三级级下拉联动【省份-城市-区域】前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

AJAX应用案例--基于MysqL,以POST方式,用DOM对象,完成三级级下拉联动【省份-城市-区域】,效果图如下:



数据库如下:

省份 城市 区域



Jsp页面代码

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  3. <html>
  4. <body>
  5. <select id="provinceID">
  6. <option>请选择省份</option>
  7. <option value="1">广东</option>
  8. <option value="2">湖南</option>
  9. </select>
  10. <select id="cityID">
  11. <option>请选择城市</option>
  12. </select>
  13. <select id="areaID">
  14. <option>请选择区域</option>
  15. </select>
  16. <script type="text/javascript">
  17. function createAJAX(){
  18. var ajax = null;
  19. try{
  20. ajax = new ActiveXObject("microsoft.xmlhttp");
  21. }catch(e){
  22. try{
  23. ajax = new XMLHttpRequest();
  24. }catch(e){
  25. alert("请更换浏览器");
  26. }
  27. }
  28. return ajax;
  29. }
  30. </script>
  31. <script type="text/javascript">
  32. //创建AJAX引擎对象
  33. var ajax = createAJAX();
  34. //产生事件
  35. document.getElementById("provinceID").onchange = function(){
  36. //再次选择省份时,清空city下拉框
  37. //定位city下拉框
  38. var citySelectElement = document.getElementById("cityID");
  39. var optionElementArray = citySelectElement.options;
  40. var size = optionElementArray.length;
  41. if(size>1){
  42. for(var i=size-1;i>0;i--){
  43. citySelectElement.removeChild(optionElementArray[i]);
  44. }
  45. }
  46. //再次选择省份时,清空area下拉框
  47. //定位area下拉框
  48. var areaSelectElement = document.getElementById("areaID");
  49. var areaOptionArray = areaSelectElement.options;
  50. var size = areaOptionArray.length;
  51. if(size>1){
  52. for(var i=size-1;i>0;i--){
  53. areaSelectElement.removeChild(areaOptionArray[i]);
  54. }
  55. }
  56. //获取选中省份的编号
  57. var optionElement = this[this.selectedIndex];
  58. var provinceId = optionElement.value;
  59. //准备发送请求
  60. var method = "POST";
  61. var url = "${pageContext.request.contextPath}/ProvinceCityAreaServlet?id="+new Date().getTime();
  62. ajax.open(method,url);
  63. //设置以POST表单形式发送,自动将请求体的中文进行编码
  64. ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
  65. //真正发送请求体中的数据
  66. var content = "provinceId="+provinceId + "&method=provinceToCity";
  67. ajax.send(content);
  68. //监听服务端的响应
  69. ajax.onreadystatechange = function(){
  70. if(ajax.readyState==4){
  71. if(ajax.status==200){
  72. var jsonJavaString = ajax.responseText;
  73. //jsonJavaString = [{"name":"长沙"},{"name":"湘潭"},{"name":"株洲"}]
  74. var json = eval("("+jsonJavaString+")");
  75. //返回值,就是可解析并执行的JavaScript代码
  76. //json = [{"name":"长沙"},{"name":"株洲"}]
  77. var size = json.length;
  78. //迭代
  79. for(var i=0;i<size;i++){
  80. var city = json[i].name;
  81. var cid = json[i].id;
  82. //创建option节点
  83. var optionElement = document.createElement("option");
  84. //设置option节点之间的内容
  85. optionElement.innerHTML = city;
  86. optionElement.setAttribute("value",cid);
  87. //添加到city下拉框中
  88. citySelectElement.appendChild(optionElement);
  89. }
  90. }
  91. }
  92. };
  93. };
  94. //===============================cityToArea==================================================
  95. //产生事件
  96. document.getElementById("cityID").onchange = function(){
  97. //再次选择城市时,定位area下拉框,清空area下拉框
  98. var areaSelectElement = document.getElementById("areaID");
  99. var areaOptionArray = areaSelectElement.options;
  100. var size = areaOptionArray.length;
  101. if(size>1){
  102. for(var i=size-1;i>0;i--){
  103. areaSelectElement.removeChild(areaOptionArray[i]);
  104. }
  105. }
  106. //获取选中城市的编号
  107. var optionElement = this[this.selectedIndex];
  108. var cid = optionElement.value;
  109. //准备发送请求
  110. var method = "POST";
  111. var url = "${pageContext.request.contextPath}/ProvinceCityAreaServlet?id="+new Date().getTime();
  112. ajax.open(method,"application/x-www-form-urlencoded");
  113. //真正发送请求体中的数据
  114. var content = "cid="+cid + "&method=cityToArea";
  115. ajax.send(content);
  116. //监听服务端的响应
  117. ajax.onreadystatechange = function(){
  118. if(ajax.readyState==4){
  119. if(ajax.status==200){
  120. var jsonJavaString = ajax.responseText;
  121. //jsonJavaString = [{"name":"长沙"},{"name":"株洲"}]
  122. var size = json.length;
  123. //迭代
  124. for(var i=0;i<size;i++){
  125. var area = json[i].name;
  126. //var cid = json[i].name;
  127. //创建option节点
  128. var optionElement = document.createElement("option");
  129. //设置option节点之间的内容
  130. optionElement.innerHTML = area;
  131. //optionElement.setAttribute("id",cid);
  132. //添加到city下拉框中
  133. areaSelectElement.appendChild(optionElement);
  134. }
  135. }
  136. }
  137. };
  138. };
  139. </script>
  140. </body>
  141. </html>

servlet代码

  1. package kerwin.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5. import java.util.List;
  6.  
  7. import javax.servlet.ServletException;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. import kerwin.bean.Area;
  13. import kerwin.bean.City;
  14. import kerwin.service.ProvinceCityAreaService;
  15. import net.sf.json.JSONArray;
  16. import net.sf.json.JsonConfig;
  17.  
  18. public class ProvinceCityAreaServlet extends HttpServlet {
  19. ProvinceCityAreaService service = new ProvinceCityAreaService();
  20. public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
  21. request.setCharacterEncoding("utf-8");
  22. String method = request.getParameter("method");
  23. if("provinceToCity".equals(method)){
  24. this.ProvinceToCity(request,response);
  25. }else if("cityToArea".equals(method)){
  26. this.cityToArea(request,response);
  27. }
  28. }
  29.  
  30. public void doPost(HttpServletRequest request,IOException {
  31. doGet(request,response);
  32. }
  33. public void ProvinceToCity(HttpServletRequest request,IOException {
  34. response.setContentType("text/html; charset=utf-8");
  35. PrintWriter out = response.getWriter();
  36. List<City> citys = null;
  37. //获取参数
  38. String pid = request.getParameter("provinceId");
  39. try {
  40. citys = service.findAllCityByProvince(pid);
  41. //使用第三方工具类,将对象转成JSON格式的字符串
  42. JsonConfig config = new JsonConfig();
  43. //去掉不需要的参数
  44. //config.setExcludes(new String[]{"id"});
  45. //将citys转换为json格式的字符串
  46. JSONArray jsonArray = JSONArray.fromObject(citys,config);
  47. String jsonJavaStr = jsonArray.toString();
  48. //将字符串响应给ajax引擎
  49. out.write(jsonJavaStr);
  50. } catch (Exception e) {
  51. e.printStackTrace();
  52. }
  53. }
  54. public void cityToArea(HttpServletRequest request,IOException {
  55. response.setContentType("text/html; charset=utf-8");
  56. PrintWriter out = response.getWriter();
  57. List<Area> areas = null;
  58. //获取参数
  59. String cid = request.getParameter("cid");
  60. try {
  61. areas = service.findAllAreaByProvince(cid);
  62. //使用第三方工具类,将对象转成JSON格式的字符串
  63. JsonConfig config = new JsonConfig();
  64. //去掉不需要的参数
  65. config.setExcludes(new String[]{"id"});
  66. //将citys转换为json格式的字符串
  67. JSONArray jsonArray = JSONArray.fromObject(areas,config);
  68. String jsonJavaStr = jsonArray.toString();
  69. //将字符串响应给ajax引擎
  70. out.write(jsonJavaStr);
  71. } catch (Exception e) {
  72. e.printStackTrace();
  73. }
  74. }
  75.  
  76. }

service层代码:省略.....


DAO层代码

  1. package kerwin.dao;
  2.  
  3. import java.util.List;
  4.  
  5. import org.apache.commons.dbutils.QueryRunner;
  6. import org.apache.commons.dbutils.handlers.BeanListHandler;
  7.  
  8. import kerwin.bean.Area;
  9. import kerwin.bean.City;
  10. import kerwin.utils.JdbcUtil;
  11.  
  12. public class ProvinceCityAreaDao{
  13. public List<City> findAllCityByProvince(String pid) throws Exception{
  14. List<City> citys = null;
  15. QueryRunner runner = new QueryRunner(JdbcUtil.dataSource);
  16. String sql = "select * from citys where pid = ?";
  17. Object params[]={pid};
  18. citys = runner.query(sql,new BeanListHandler<City>(City.class),params);
  19. return citys;
  20. }
  21. public List<Area> findAllAreaByProvince(String cid) throws Exception{
  22. List<Area> areas = null;
  23. QueryRunner runner = new QueryRunner(JdbcUtil.dataSource);
  24. String sql = "select * from area where cid = ?";
  25. Object params[]={cid};
  26. areas = runner.query(sql,new BeanListHandler<Area>(Area.class),params);
  27. return areas;
  28. }
  29. }

还有三个province、city、area JavaBean类省略......


MysqL连接使用c3p0连接池:

c3p0-config.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <c3p0-config>
  3. <default-config>
  4. <property name="driverClass">com.MysqL.jdbc.Driver</property>
  5. <property name="jdbcUrl">jdbc:MysqL://127.0.0.1:3306/ajax</property>
  6. <property name="user">root</property>
  7. <property name="password">root</property>
  8. <property name="acquireIncrement">2</property>
  9. <property name="initialPoolSize">5</property>
  10. <property name="minPoolSize">1</property>
  11. <property name="maxPoolSize">5</property>
  12. </default-config>
  13. </c3p0-config>
  14.  
  15.  

JdbcUtil.java:

  1. package kerwin.utils;
  2.  
  3. import com.mchange.v2.c3p0.ComboPooledDataSource;
  4.  
  5. public class JdbcUtil {
  6. public static ComboPooledDataSource dataSource = new ComboPooledDataSource();
  7.  
  8. public static ComboPooledDataSource getDataSource() {
  9. return dataSource;
  10. }
  11. }

猜你在找的Ajax相关文章