AJAX完成三级级下拉联动【省份-城市-区域】

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

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


数据库如下:

省份 城市 区域

Jsp页面代码

[html] view plain copy
  1. <%@pagelanguage="java"pageEncoding="UTF-8"%>@H_301_60@
  2. <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">@H_301_60@
  3. <html bodyselectid="provinceID"option>请选择省份</optionvalue="1">广东optionvalue="2">湖南selectselectid="cityID">请选择城市selectid="areaID">请选择区域scripttype="text/javascript" functioncreateAJAX(){@H_301_60@
  4. varajax=null;@H_301_60@
  5. try{@H_301_60@
  6. ajax=newActiveXObject("microsoft.xmlhttp");@H_301_60@
  7. }catch(e){@H_301_60@
  8. try{@H_301_60@
  9. ajax=newXMLHttpRequest();@H_301_60@
  10. }catch(e){@H_301_60@
  11. alert("请更换浏览器");@H_301_60@
  12. }@H_301_60@
  13. }@H_301_60@
  14. returnajax;@H_301_60@
  15. script //创建AJAX引擎对象@H_301_60@
  16. varajax=createAJAX();@H_301_60@
  17. //产生事件@H_301_60@
  18. document.getElementById("provinceID").onchange=function(){@H_301_60@
  19. //再次选择省份时,清空city下拉框@H_301_60@
  20. //定位city下拉框@H_301_60@
  21. varcitySelectElement=document.getElementById("cityID");@H_301_60@
  22. varoptionElementArray=citySelectElement.options;@H_301_60@
  23. varsize=optionElementArray.length;@H_301_60@
  24. if(size>1){@H_301_60@
  25. for(vari=size-1;i>0;i--){@H_301_60@
  26. citySelectElement.removeChild(optionElementArray[i]);@H_301_60@
  27. @H_301_60@
  28. //再次选择省份时,清空area下拉框@H_301_60@
  29. //定位area下拉框@H_301_60@
  30. varareaSelectElement=document.getElementById("areaID");@H_301_60@
  31. varareaOptionArray=areaSelectElement.options;@H_301_60@
  32. varsize=areaOptionArray.length;@H_301_60@
  33. if(size>1){@H_301_60@
  34. for(vari=size-1;i>0;i--){@H_301_60@
  35. areaSelectElement.removeChild(areaOptionArray[i]);@H_301_60@
  36. @H_301_60@
  37. //获取选中省份的编号@H_301_60@
  38. varoptionElement=this[this.selectedIndex];@H_301_60@
  39. varprovinceId=optionElement.value;@H_301_60@
  40. //准备发送请求@H_301_60@
  41. varmethod="POST";@H_301_60@
  42. varurl="${pageContext.request.contextPath}/ProvinceCityAreaServlet?id="+newDate().getTime();@H_301_60@
  43. ajax.open(method,url);@H_301_60@
  44. //设置以POST表单形式发送,自动将请求体的中文进行编码@H_301_60@
  45. ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");@H_301_60@
  46. //真正发送请求体中的数据@H_301_60@
  47. varcontent="provinceId="+provinceId+"&method=provinceToCity";@H_301_60@
  48. ajax.send(content);@H_301_60@
  49. //监听服务端的响应@H_301_60@
  50. ajax.onreadystatechange=function(){@H_301_60@
  51. if(ajax.readyState==4){@H_301_60@
  52. if(ajax.status==200){@H_301_60@
  53. varjsonJavaString=ajax.responseText;@H_301_60@
  54. //jsonJavaString=[{"name":"长沙"},{"name":"湘潭"},{"name":"株洲"}]@H_301_60@
  55. varjson=eval("("+jsonJavaString+")");@H_301_60@
  56. //返回值,就是可解析并执行的JavaScript代码@H_301_60@
  57. //json=[{"name":"长沙"},{"name":"株洲"}]@H_301_60@
  58. varsize=json.length;@H_301_60@
  59. //迭代@H_301_60@
  60. for(vari=0;isize;i++){@H_301_60@
  61. varcity=json[i].name;@H_301_60@
  62. varcid=json[i].id;@H_301_60@
  63. //创建option节点@H_301_60@
  64. varoptionElement=document.createElement("option");@H_301_60@
  65. //设置option节点之间的内容@H_301_60@
  66. optionElement.innerHTML=city;@H_301_60@
  67. optionElement.setAttribute("value",cid);@H_301_60@
  68. //添加到city下拉框中@H_301_60@
  69. citySelectElement.appendChild(optionElement);@H_301_60@
  70. };@H_301_60@
  71. };@H_301_60@
  72. //===============================cityToArea==================================================@H_301_60@
  73. //产生事件@H_301_60@
  74. document.getElementById("cityID").onchange=function(){@H_301_60@
  75. //再次选择城市时,定位area下拉框,清空area下拉框@H_301_60@
  76. //获取选中城市的编号@H_301_60@
  77. varcid=optionElement.value;@H_301_60@
  78. varcontent="cid="+cid+"&method=cityToArea";@H_301_60@
  79. vararea=json[i].name;@H_301_60@
  80. //varcid=json[i].name;@H_301_60@
  81. optionElement.innerHTML=area;@H_301_60@
  82. //optionElement.setAttribute("id",108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px"> areaSelectElement.appendChild(optionElement);@H_301_60@
  83. >@H_301_60@

servlet代码

[java] copy
    packagekerwin.servlet;@H_301_60@
  1. importjava.io.IOException;@H_301_60@
  2. importjava.io.PrintWriter;@H_301_60@
  3. importjava.util.List;@H_301_60@
  4. importjavax.servlet.ServletException;@H_301_60@
  5. importjavax.servlet.http.HttpServlet;@H_301_60@
  6. importjavax.servlet.http.HttpServletRequest;@H_301_60@
  7. importjavax.servlet.http.HttpServletResponse;@H_301_60@
  8. importkerwin.bean.Area;@H_301_60@
  9. importkerwin.bean.City;@H_301_60@
  10. importkerwin.service.ProvinceCityAreaService;@H_301_60@
  11. importnet.sf.json.JSONArray;@H_301_60@
  12. importnet.sf.json.JsonConfig;@H_301_60@
  13. publicclassProvinceCityAreaServletextendsHttpServlet{@H_301_60@
  14. ProvinceCityAreaServiceservice=newProvinceCityAreaService();@H_301_60@
  15. voiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{@H_301_60@
  16. request.setCharacterEncoding("utf-8");@H_301_60@
  17. Stringmethod=request.getParameter("method");@H_301_60@
  18. if("provinceToCity".equals(method)){@H_301_60@
  19. this.ProvinceToCity(request,response);@H_301_60@
  20. }elseif("cityToArea".equals(method)){@H_301_60@
  21. this.cityToArea(request,153); background-color:inherit; font-weight:bold">voiddoPost(HttpServletRequestrequest,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px"> doGet(request,response);@H_301_60@
  22. voidProvinceToCity(HttpServletRequestrequest,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px"> response.setContentType("text/html;charset=utf-8");@H_301_60@
  23. PrintWriterout=response.getWriter();@H_301_60@
  24. List<City>citys=null;@H_301_60@
  25. //获取参数@H_301_60@
  26. Stringpid=request.getParameter("provinceId");@H_301_60@
  27. try{@H_301_60@
  28. citys=service.findAllCityByProvince(pid);@H_301_60@
  29. //使用第三方工具类,将对象转成JSON格式的字符串@H_301_60@
  30. JsonConfigconfig=newJsonConfig();@H_301_60@
  31. //去掉不需要的参数@H_301_60@
  32. //config.setExcludes(newString[]{"id"});@H_301_60@
  33. //将citys转换为json格式的字符串@H_301_60@
  34. JSONArrayjsonArray=JSONArray.fromObject(citys,config);@H_301_60@
  35. StringjsonJavaStr=jsonArray.toString();@H_301_60@
  36. //将字符串响应给ajax引擎@H_301_60@
  37. out.write(jsonJavaStr);@H_301_60@
  38. catch(Exceptione){@H_301_60@
  39. e.printStackTrace();@H_301_60@
  40. voidcityToArea(HttpServletRequestrequest,IOException{@H_301_60@
  41. response.setContentType("text/html;charset=utf-8");@H_301_60@
  42. PrintWriterout=response.getWriter();@H_301_60@
  43. List<Area>areas=null;@H_301_60@
  44. //获取参数@H_301_60@
  45. Stringcid=request.getParameter("cid");@H_301_60@
  46. try{@H_301_60@
  47. areas=service.findAllAreaByProvince(cid);@H_301_60@
  48. //使用第三方工具类,将对象转成JSON格式的字符串@H_301_60@
  49. JsonConfigconfig=newJsonConfig();@H_301_60@
  50. //去掉不需要的参数@H_301_60@
  51. config.setExcludes(newString[]{"id"});@H_301_60@
  52. //将citys转换为json格式的字符串@H_301_60@
  53. JSONArrayjsonArray=JSONArray.fromObject(areas,config);@H_301_60@
  54. StringjsonJavaStr=jsonArray.toString();@H_301_60@
  55. //将字符串响应给ajax引擎@H_301_60@
  56. out.write(jsonJavaStr);@H_301_60@
  57. }catch(Exceptione){@H_301_60@
  58. e.printStackTrace();@H_301_60@
  59. }@H_301_60@

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


DAO层代码

copy

    packagekerwin.dao;@H_301_60@
  1. importorg.apache.commons.dbutils.QueryRunner;@H_301_60@
  2. importorg.apache.commons.dbutils.handlers.BeanListHandler;@H_301_60@
  3. importkerwin.utils.JdbcUtil;@H_301_60@
  4. classProvinceCityAreaDao{@H_301_60@
  5. publicList<City>findAllCityByProvince(Stringpid)throwsException{@H_301_60@
  6. QueryRunnerrunner=newQueryRunner(JdbcUtil.dataSource);@H_301_60@
  7. Stringsql="select*fromcityswherepid=?";@H_301_60@
  8. Objectparams[]={pid};@H_301_60@
  9. citys=runner.query(sql,newBeanListHandler<City>(City.class),params);@H_301_60@
  10. returncitys;@H_301_60@
  11. publicList<Area>findAllAreaByProvince(Stringcid) List<Area>areas= Stringsql="select*fromareawherecid=?";@H_301_60@
  12. Objectparams[]={cid};@H_301_60@
  13. areas=runner.query(sql,153); background-color:inherit; font-weight:bold">newBeanListHandler<Area>(Area.returnareas;@H_301_60@
  14. }@H_301_60@

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

MysqL连接使用c3p0连接池:

c3p0-config.xml:

copy
    <?xmlversion="1.0"encoding="UTF-8"?>@H_301_60@
  1. c3p0-configdefault-configpropertyname="driverClass">com.MysqL.jdbc.Driverpropertypropertyname="jdbcUrl">jdbc:MysqL://127.0.0.1:3306/ajaxpropertyname="user">rootpropertyname="password"propertyname="acquireIncrement">2propertyname="initialPoolSize">5propertyname="minPoolSize">1propertyname="maxPoolSize"JdbcUtil.java:

    copy

    packagekerwin.utils;@H_301_60@
  1. importcom.mchange.v2.c3p0.ComboPooledDataSource;@H_301_60@
  2. classJdbcUtil{@H_301_60@
  3. staticComboPooledDataSourcedataSource=newComboPooledDataSource();@H_301_60@
  4. staticComboPooledDataSourcegetDataSource(){@H_301_60@
  5. returndataSource;@H_301_60@
  6. } @H_301_60@

猜你在找的Ajax相关文章