AJAX应用案例--基于mysql,以POST方式,用DOM对象,完成三级级下拉联动【省份-城市-区域】,效果图如下:
数据库如下:
省份 城市 区域
Jsp页面代码:
- <%@pagelanguage="java"pageEncoding="UTF-8"%>
- <!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
- <html bodyselectid="provinceID"option>请选择省份</optionvalue="1">广东optionvalue="2">湖南selectselectid="cityID">请选择城市selectid="areaID">请选择区域scripttype="text/javascript" functioncreateAJAX(){
- varajax=null;
- try{
- ajax=newActiveXObject("microsoft.xmlhttp");
- }catch(e){
- try{
- ajax=newXMLHttpRequest();
- }catch(e){
- alert("请更换浏览器");
- }
- }
- returnajax;
- script //创建AJAX引擎对象
- varajax=createAJAX();
- //产生事件
- document.getElementById("provinceID").onchange=function(){
- //再次选择省份时,清空city下拉框
- //定位city下拉框
- varcitySelectElement=document.getElementById("cityID");
- varoptionElementArray=citySelectElement.options;
- varsize=optionElementArray.length;
- if(size>1){
- for(vari=size-1;i>0;i--){
- citySelectElement.removeChild(optionElementArray[i]);
-
- //再次选择省份时,清空area下拉框
- //定位area下拉框
- varareaSelectElement=document.getElementById("areaID");
- varareaOptionArray=areaSelectElement.options;
- varsize=areaOptionArray.length;
- if(size>1){
- for(vari=size-1;i>0;i--){
- areaSelectElement.removeChild(areaOptionArray[i]);
-
- //获取选中省份的编号
- varoptionElement=this[this.selectedIndex];
- varprovinceId=optionElement.value;
- //准备发送请求
- varmethod="POST";
- varurl="${pageContext.request.contextPath}/ProvinceCityAreaServlet?id="+newDate().getTime();
- ajax.open(method,url);
- //设置以POST表单形式发送,自动将请求体的中文进行编码
- ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");
- //真正发送请求体中的数据
- varcontent="provinceId="+provinceId+"&method=provinceToCity";
- ajax.send(content);
- //监听服务端的响应
- ajax.onreadystatechange=function(){
- if(ajax.readyState==4){
- if(ajax.status==200){
- varjsonJavaString=ajax.responseText;
- //jsonJavaString=[{"name":"长沙"},{"name":"湘潭"},{"name":"株洲"}]
- varjson=eval("("+jsonJavaString+")");
- //返回值,就是可解析并执行的JavaScript代码
- //json=[{"name":"长沙"},{"name":"株洲"}]
- varsize=json.length;
- //迭代
- for(vari=0;isize;i++){
- varcity=json[i].name;
- varcid=json[i].id;
- //创建option节点
- varoptionElement=document.createElement("option");
- //设置option节点之间的内容
- optionElement.innerHTML=city;
- optionElement.setAttribute("value",cid);
- //添加到city下拉框中
- citySelectElement.appendChild(optionElement);
- };
- };
- //===============================cityToArea==================================================
- //产生事件
- document.getElementById("cityID").onchange=function(){
- //再次选择城市时,定位area下拉框,清空area下拉框
- //获取选中城市的编号
- varcid=optionElement.value;
- varcontent="cid="+cid+"&method=cityToArea";
- vararea=json[i].name;
- //varcid=json[i].name;
- optionElement.innerHTML=area;
- //optionElement.setAttribute("id",108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px"> areaSelectElement.appendChild(optionElement);
- >
servlet代码:
packagekerwin.servlet;
- importjava.io.IOException;
- importjava.io.PrintWriter;
- importjava.util.List;
- importjavax.servlet.ServletException;
- importjavax.servlet.http.HttpServlet;
- importjavax.servlet.http.HttpServletRequest;
- importjavax.servlet.http.HttpServletResponse;
- importkerwin.bean.Area;
- importkerwin.bean.City;
- importkerwin.service.ProvinceCityAreaService;
- importnet.sf.json.JSONArray;
- importnet.sf.json.JsonConfig;
- publicclassProvinceCityAreaServletextendsHttpServlet{
- ProvinceCityAreaServiceservice=newProvinceCityAreaService();
- voiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
- request.setCharacterEncoding("utf-8");
- Stringmethod=request.getParameter("method");
- if("provinceToCity".equals(method)){
- this.ProvinceToCity(request,response);
- }elseif("cityToArea".equals(method)){
- 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);
- voidProvinceToCity(HttpServletRequestrequest,108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px"> response.setContentType("text/html;charset=utf-8");
- PrintWriterout=response.getWriter();
- List<City>citys=null;
-
- Stringpid=request.getParameter("provinceId");
- try{
- citys=service.findAllCityByProvince(pid);
- //使用第三方工具类,将对象转成JSON格式的字符串
- JsonConfigconfig=newJsonConfig();
- //去掉不需要的参数
-
- //将citys转换为json格式的字符串
- JSONArrayjsonArray=JSONArray.fromObject(citys,config);
- StringjsonJavaStr=jsonArray.toString();
- //将字符串响应给ajax引擎
- out.write(jsonJavaStr);
- catch(Exceptione){
- e.printStackTrace();
- voidcityToArea(HttpServletRequestrequest,IOException{
- response.setContentType("text/html;charset=utf-8");
- PrintWriterout=response.getWriter();
- List<Area>areas=null;
- //获取参数
- Stringcid=request.getParameter("cid");
- try{
- areas=service.findAllAreaByProvince(cid);
- //使用第三方工具类,将对象转成JSON格式的字符串
- JsonConfigconfig=newJsonConfig();
- //去掉不需要的参数
- config.setExcludes(newString[]{"id"});
- //将citys转换为json格式的字符串
- JSONArrayjsonArray=JSONArray.fromObject(areas,config);
- StringjsonJavaStr=jsonArray.toString();
- //将字符串响应给ajax引擎
- out.write(jsonJavaStr);
- }catch(Exceptione){
- e.printStackTrace();
- }
service层代码:省略.....
DAO层代码:
copy
packagekerwin.dao;
- importorg.apache.commons.dbutils.QueryRunner;
- importorg.apache.commons.dbutils.handlers.BeanListHandler;
- importkerwin.utils.JdbcUtil;
- classProvinceCityAreaDao{
- publicList<City>findAllCityByProvince(Stringpid)throwsException{
- QueryRunnerrunner=newQueryRunner(JdbcUtil.dataSource);
- Stringsql="select*fromcityswherepid=?";
- Objectparams[]={pid};
- citys=runner.query(sql,newBeanListHandler<City>(City.class),params);
- returncitys;
- publicList<Area>findAllAreaByProvince(Stringcid) List<Area>areas= Stringsql="select*fromareawherecid=?";
- Objectparams[]={cid};
- areas=runner.query(sql,153); background-color:inherit; font-weight:bold">newBeanListHandler<Area>(Area.returnareas;
- }
还有三个province、city、area JavaBean类省略......
mysql连接使用c3p0连接池:
c3p0-config.xml:
<?xmlversion="1.0"encoding="UTF-8"?>
- 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;
- importcom.mchange.v2.c3p0.ComboPooledDataSource;
- classJdbcUtil{
- staticComboPooledDataSourcedataSource=newComboPooledDataSource();
- staticComboPooledDataSourcegetDataSource(){
- returndataSource;
- }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|