`

JQuery Ajax三级联动地区下拉框

阅读更多

JSP部分代码

 

<script src="/js/jquery-1.2.6.min.js" type="text/javascript"></script>
<script>
 //为了避免jquery中的'$'与其它的'$'冲突,在此将jquery中的'$'重命名为'jQuery'
 var jQuery=$;
</script>


 

<script>


  //初始化数据
  jQuery(document).ready(function(){
 
   getProvince();

 });
 

 
 
  //取所有省份
  function getProvince(){

   //&callback=?"注意这个是为了解决跨域访问的问题   
   var url ="http://www.yimei.com/shopcar/getAreaJSON?areaId=0&callback=?";
   
   jQuery.getJSON(url,null,function call(result){  
         setProvince(result); 
     });
   
   //显示或隐藏激活卡
   jQuery("#actionCardChk").click(function(){
    if(jQuery("#actionCardChk").attr("checked")==true){
     jQuery("#actionCardDiv").show();
    }else{
     jQuery("#actionCardDiv").hide();
    }
   });
   
   //显示或隐藏新增常用地址
   jQuery("#addressChk").click(function(){
    if(jQuery("#addressChk").attr("checked")==true){
     jQuery("#addressDiv").show();
    }else{
     jQuery("#addressDiv").hide();
    }
   });
   
   
  }
 
 
 
 
  //设置省份
  function setProvince(result){
  
  var province = document.getElementById("toProvince");
  
  jQuery.each(result.data, function(i, area){
         var value = area.id;
    var text = area.name;
    var option = new Option(text,value);
    province.options.add(option);
         
    }); 
  
  }
 
 
  //按上级ID取子地区
  function getArea(name){
   
   if( name=='city' ){
    clearSel(document.getElementById("toCity")); //清空城市
    var province = document.getElementById("toProvince");
    if(province.options[province.selectedIndex].value == "") return;
    var areaId = province.options[province.selectedIndex].value;
    
    var url ="http://www.yimei.com/shopcar/getAreaJSON?areaId="+areaId+"&callback=?";
    jQuery.getJSON(url,null,function call(result){  
          setCity(result); 
      });
    
   }else if( name=='county'){
    clearSel(document.getElementById("toCounty")); //清空城区
    var city = document.getElementById("toCity");
    if(city.options[city.selectedIndex].value == "") return;
    var areaId = city.options[city.selectedIndex].value;
    
    var url ="http://www.yimei.com/shopcar/getAreaJSON?areaId="+areaId+"&callback=?";
    jQuery.getJSON(url,null,function call(result){  
          setCounty(result); 
      });
      
   }
  }
 
  //当改变省份时设置城市
  function setCity(result){
  
  var city = document.getElementById("toCity");
  
  jQuery.each(result.data, function(i, area){
         var value = area.id;
    var text = area.name;
    var option = new Option(text,value);
    city.options.add(option);
    }); 
   
  }
 
 
  //当改变省份时设置城市
  function setCounty(result){
 
  var county = document.getElementById("toCounty");
  
  jQuery.each(result.data, function(i, area){
         var value = area.id;
    var text = area.name;
    var option = new Option(text,value);
    county.options.add(option);
    }); 
   
  }
 
  // 清空下拉列表
  function clearSel(oSelect){
     
  while(oSelect.childNodes.length>0){
   oSelect.removeChild(oSelect.childNodes[0]);
  }
        
  }

 

</script>

 

  <tr>
  <td height="28" colspan="3">
   <select name="toProvince" id="toProvince" onChange="getArea('city')" class="STYLE5" onFocus="doOnFocus(this);">
    <option value="" selected>请选择省份...</option>
   </select>         
  </td>
         </tr>

         <tr>
  <td height="28" colspan="3">              
   <select name="toCity" id="toCity" class="board" onChange="getArea('county')" onFocus="doOnFocus(this);">
    <option value="">请选择城市...</option>
   </select>        
  </td>
               
         </tr>
        
         <tr>
  <td class="STYLE3">
   <select name="toCounty" id="toCounty" class="board"  onfocus="doOnFocus(this);">
    <option value="">请选择城区...</option>
   </select>        
  </td>
 </tr>

 

 

JAVA部分代码 Servlet

 

 response.setContentType("text/xml;charset=utf-8");
  response.setHeader("Pragma","No-cache");
  response.setDateHeader("Expires",0);
  response.setHeader("Cache-Control","no-cache");    
  PrintWriter out=response.getWriter();

  String areaId = request.getParameter("areaId");
  
  if(areaId==null || areaId.trim().length()<=0){
   //sb.append("<data><error>系统错误地区id为空</error></data>");
   //out.print(sb.toString());
   return;
  }  
  

  //注意这个是为了解决跨域访问的问题
  String callback = request.getParameter("callback");   
  
  try {

   List areaList = AreaService.getInstance().getAreasByParentId(Integer.parseInt(areaId));

   // 取集合
   JSONArray jsonArray = JSONArray.fromObject(areaList);

   JSONObject jsobjcet = new JSONObject();

   jsobjcet.put("data", jsonArray);
   
   response.getWriter().write(callback+"("+jsobjcet.toString()+");");

   log.info(callback+"("+jsobjcet.toString()+");");
   
   
  } catch (IOException e) {
   e.printStackTrace();
  }
    

 

DAO部分代码

public List getAreasByParentId(int parentId) {
  Connection conn=null;
  Statement stm=null;
  ResultSet rs=null;
  List<AreaInfo> list = new ArrayList<AreaInfo>();
  try{
   conn = ConnectionPool.getConnection();
   if( conn == null ) throw new Exception("DataBase connection error");
   stm = conn.createStatement();
   String sql ="select * from n_area where parent_id =" + parentId;
   rs = stm.executeQuery(sql);
   AreaInfo areaInfo = null;
   while( rs.next() ) {
    areaInfo= new AreaInfo();
    areaInfo.setId(rs.getInt("id"));
    areaInfo.setName(rs.getString("name"));
    areaInfo.setParentId(rs.getInt("parent_id"));
    list.add(areaInfo);
   }
  }catch(Exception e){
   log.error("getAreasByParentId() error:"+e.getMessage());
  }finally{
   ConnectionPool.release(conn,stm,rs); //释放资源
  }
  return list;
 }

 

 

数据表结构

CREATE TABLE `n_area` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(20) default NULL,
  `parent_id` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=224 DEFAULT CHARSET=gbk;

记录

 

INSERT INTO `n_area` VALUES ('1', '广东省', '0');
INSERT INTO `n_area` VALUES ('2', '北京', '0');
INSERT INTO `n_area` VALUES ('3', '深圳市', '1');
INSERT INTO `n_area` VALUES ('4', '广州市', '1');
INSERT INTO `n_area` VALUES ('5', '北京五环以内', '2');
INSERT INTO `n_area` VALUES ('6', '天津', '0');
INSERT INTO `n_area` VALUES ('7', '天津市', '6');
INSERT INTO `n_area` VALUES ('14', '珠海市', '1');
INSERT INTO `n_area` VALUES ('15', '汕头市', '1');
INSERT INTO `n_area` VALUES ('16', '佛山市', '1');
INSERT INTO `n_area` VALUES ('17', '东莞市', '1');
INSERT INTO `n_area` VALUES ('22', '肇庆市', '1');
INSERT INTO `n_area` VALUES ('23', '惠州市', '1');
INSERT INTO `n_area` VALUES ('24', '清远市', '1');
INSERT INTO `n_area` VALUES ('25', '韶关市', '1');
INSERT INTO `n_area` VALUES ('26', '湛江市', '1');
INSERT INTO `n_area` VALUES ('27', '潮州市', '1');
INSERT INTO `n_area` VALUES ('28', '梅州市', '1');
INSERT INTO `n_area` VALUES ('29', '茂名市', '1');
INSERT INTO `n_area` VALUES ('30', '浙江省', '0');
INSERT INTO `n_area` VALUES ('31', '江苏省', '0');
INSERT INTO `n_area` VALUES ('32', '福建省', '0');
INSERT INTO `n_area` VALUES ('33', '广西省', '0');
INSERT INTO `n_area` VALUES ('34', '江西省', '0');
INSERT INTO `n_area` VALUES ('35', '山东省', '0');
INSERT INTO `n_area` VALUES ('36', '湖南省', '0');
INSERT INTO `n_area` VALUES ('37', '安徽省', '0');
INSERT INTO `n_area` VALUES ('38', '贵州省', '0');
INSERT INTO `n_area` VALUES ('39', '黑龙江省', '0');
INSERT INTO `n_area` VALUES ('40', '辽宁省', '0');
INSERT INTO `n_area` VALUES ('41', '四川省', '0');
INSERT INTO `n_area` VALUES ('42', '湖北省', '0');
INSERT INTO `n_area` VALUES ('43', '陕西省', '0');
INSERT INTO `n_area` VALUES ('44', '河南省', '0');
INSERT INTO `n_area` VALUES ('45', '山西省', '0');
INSERT INTO `n_area` VALUES ('46', '海南省', '0');
INSERT INTO `n_area` VALUES ('47', '杭州市', '30');
INSERT INTO `n_area` VALUES ('48', '温州市', '30');
INSERT INTO `n_area` VALUES ('49', '宁波市', '30');
INSERT INTO `n_area` VALUES ('50', '台州市', '30');
INSERT INTO `n_area` VALUES ('51', '南京市', '31');
INSERT INTO `n_area` VALUES ('52', '无锡市', '31');
INSERT INTO `n_area` VALUES ('53', '苏州市', '31');
INSERT INTO `n_area` VALUES ('54', '常州市', '31');
INSERT INTO `n_area` VALUES ('55', '徐州市', '31');
INSERT INTO `n_area` VALUES ('56', '福州市', '32');
INSERT INTO `n_area` VALUES ('57', '厦门市', '32');
INSERT INTO `n_area` VALUES ('58', '泉州市', '32');
INSERT INTO `n_area` VALUES ('59', '漳州市', '32');
INSERT INTO `n_area` VALUES ('60', '南宁市', '33');
INSERT INTO `n_area` VALUES ('61', '桂林市', '33');
INSERT INTO `n_area` VALUES ('62', '柳州市', '33');
INSERT INTO `n_area` VALUES ('63', '百色市', '33');
INSERT INTO `n_area` VALUES ('64', '南昌市', '34');
INSERT INTO `n_area` VALUES ('65', '赣州市', '34');
INSERT INTO `n_area` VALUES ('66', '济南市', '35');
INSERT INTO `n_area` VALUES ('67', '青岛市', '35');
INSERT INTO `n_area` VALUES ('68', '长沙市', '36');
INSERT INTO `n_area` VALUES ('69', '合肥市', '37');
INSERT INTO `n_area` VALUES ('70', '贵阳市', '38');
INSERT INTO `n_area` VALUES ('71', '哈尔滨市', '39');
INSERT INTO `n_area` VALUES ('72', '大连市', '40');
INSERT INTO `n_area` VALUES ('73', '成都市', '41');
INSERT INTO `n_area` VALUES ('74', '武汉市', '42');
INSERT INTO `n_area` VALUES ('75', '西安市', '43');
INSERT INTO `n_area` VALUES ('76', '郑州市', '44');
INSERT INTO `n_area` VALUES ('77', '太原市', '45');
INSERT INTO `n_area` VALUES ('78', '海口市', '46');
INSERT INTO `n_area` VALUES ('79', '中山市', '1');
INSERT INTO `n_area` VALUES ('80', '顺德市', '1');
INSERT INTO `n_area` VALUES ('81', '江门市', '1');
INSERT INTO `n_area` VALUES ('82', '云浮市', '1');
INSERT INTO `n_area` VALUES ('83', '阳江市', '1');
INSERT INTO `n_area` VALUES ('84', '揭阳市', '1');
INSERT INTO `n_area` VALUES ('85', '河源市', '1');
INSERT INTO `n_area` VALUES ('86', '重庆', '0');
INSERT INTO `n_area` VALUES ('87', '重庆市区', '86');
INSERT INTO `n_area` VALUES ('88', '上海', '0');
INSERT INTO `n_area` VALUES ('89', '上海市', '88');
INSERT INTO `n_area` VALUES ('91', '北京五环以外', '2');
INSERT INTO `n_area` VALUES ('93', '重庆郊区', '86');
INSERT INTO `n_area` VALUES ('94', '河北省', '0');
INSERT INTO `n_area` VALUES ('95', '石家庄市', '94');
INSERT INTO `n_area` VALUES ('96', '保定市', '94');
INSERT INTO `n_area` VALUES ('97', '邯郸市', '94');
INSERT INTO `n_area` VALUES ('98', '张家口市', '94');
INSERT INTO `n_area` VALUES ('99', '秦皇岛市', '94');
INSERT INTO `n_area` VALUES ('100', '邢台市', '94');
INSERT INTO `n_area` VALUES ('101', '唐山市', '94');
INSERT INTO `n_area` VALUES ('102', '承德市', '94');
INSERT INTO `n_area` VALUES ('103', '镇江市', '31');
INSERT INTO `n_area` VALUES ('104', '绍兴市', '30');
INSERT INTO `n_area` VALUES ('105', '嘉兴市', '30');
INSERT INTO `n_area` VALUES ('106', '南通市', '31');
INSERT INTO `n_area` VALUES ('107', '扬州市', '31');
INSERT INTO `n_area` VALUES ('108', '连云港市', '31');
INSERT INTO `n_area` VALUES ('109', '北海市', '33');
INSERT INTO `n_area` VALUES ('110', '九江市', '34');
INSERT INTO `n_area` VALUES ('111', '景德镇市', '34');
INSERT INTO `n_area` VALUES ('112', '淄博市', '35');
INSERT INTO `n_area` VALUES ('113', '烟台市', '35');
INSERT INTO `n_area` VALUES ('114', '潍坊市', '35');
INSERT INTO `n_area` VALUES ('115', '威海市', '35');
INSERT INTO `n_area` VALUES ('116', '岳阳市', '36');
INSERT INTO `n_area` VALUES ('117', '湘潭市', '36');
INSERT INTO `n_area` VALUES ('118', '株洲市', '36');
INSERT INTO `n_area` VALUES ('119', '衡阳市', '36');
INSERT INTO `n_area` VALUES ('120', '常德市', '36');
INSERT INTO `n_area` VALUES ('121', '滁州市', '37');
INSERT INTO `n_area` VALUES ('123', '安庆市', '37');
INSERT INTO `n_area` VALUES ('124', '遵义市', '38');
INSERT INTO `n_area` VALUES ('125', '安顺市', '38');
INSERT INTO `n_area` VALUES ('126', '六盘水市', '38');
INSERT INTO `n_area` VALUES ('127', '沈阳市', '40');
INSERT INTO `n_area` VALUES ('128', '鞍山市', '40');
INSERT INTO `n_area` VALUES ('129', '攀枝花市', '41');
INSERT INTO `n_area` VALUES ('130', '南充市', '41');
INSERT INTO `n_area` VALUES ('131', '襄樊市', '42');
INSERT INTO `n_area` VALUES ('132', '黄石市', '42');
INSERT INTO `n_area` VALUES ('133', '汉中市', '43');
INSERT INTO `n_area` VALUES ('134', '洛阳市', '44');
INSERT INTO `n_area` VALUES ('135', '开封市', '44');
INSERT INTO `n_area` VALUES ('136', '云南省', '0');
INSERT INTO `n_area` VALUES ('137', '昆明市', '136');
INSERT INTO `n_area` VALUES ('138', '丽江市', '136');
INSERT INTO `n_area` VALUES ('139', '蚌埠市', '37');
INSERT INTO `n_area` VALUES ('140', '南山区', '3');
INSERT INTO `n_area` VALUES ('141', '其它区', '3');
INSERT INTO `n_area` VALUES ('143', '市北区', '67');
INSERT INTO `n_area` VALUES ('213', '西藏', '0');
INSERT INTO `n_area` VALUES ('178', '甘肃省', '0');
INSERT INTO `n_area` VALUES ('179', '兰州市', '178');
INSERT INTO `n_area` VALUES ('180', '内蒙古', '0');
INSERT INTO `n_area` VALUES ('181', '呼和浩特', '180');
INSERT INTO `n_area` VALUES ('182', '吉林省', '0');
INSERT INTO `n_area` VALUES ('183', '新疆省', '0');
INSERT INTO `n_area` VALUES ('184', '新疆', '183');
INSERT INTO `n_area` VALUES ('185', '吉林市', '182');
INSERT INTO `n_area` VALUES ('215', '其他地区', '213');
INSERT INTO `n_area` VALUES ('187', '其他地区', '1');
INSERT INTO `n_area` VALUES ('188', '其他地区', '30');
INSERT INTO `n_area` VALUES ('189', '其他地区', '31');
INSERT INTO `n_area` VALUES ('190', '其他地区', '32');
INSERT INTO `n_area` VALUES ('191', '其他地区', '33');
INSERT INTO `n_area` VALUES ('192', '其他地区', '34');
INSERT INTO `n_area` VALUES ('193', '其他地区', '35');
INSERT INTO `n_area` VALUES ('194', '其他地区', '36');
INSERT INTO `n_area` VALUES ('195', '其他地区', '37');
INSERT INTO `n_area` VALUES ('196', '其他地区', '38');
INSERT INTO `n_area` VALUES ('197', '其他地区', '39');
INSERT INTO `n_area` VALUES ('198', '其他地区', '40');
INSERT INTO `n_area` VALUES ('199', '其他地区', '41');
INSERT INTO `n_area` VALUES ('200', '其他地区', '42');
INSERT INTO `n_area` VALUES ('201', '其他地区', '43');
INSERT INTO `n_area` VALUES ('202', '其他地区', '44');
INSERT INTO `n_area` VALUES ('203', '其他地区', '94');
INSERT INTO `n_area` VALUES ('204', '其他地区', '136');
INSERT INTO `n_area` VALUES ('205', '其他地区', '178');
INSERT INTO `n_area` VALUES ('206', '其他地区', '180');
INSERT INTO `n_area` VALUES ('207', '其他地区', '182');
INSERT INTO `n_area` VALUES ('214', '拉萨', '213');
INSERT INTO `n_area` VALUES ('210', '其他地区', '45');
INSERT INTO `n_area` VALUES ('211', '其他地区', '46');
INSERT INTO `n_area` VALUES ('212', '其他地区', '86');
INSERT INTO `n_area` VALUES ('220', '新三区', '184');
INSERT INTO `n_area` VALUES ('219', '新二区', '184');
INSERT INTO `n_area` VALUES ('221', '天河区', '4');
INSERT INTO `n_area` VALUES ('222', '越秀区', '4');
INSERT INTO `n_area` VALUES ('223', '海珠区', '4');

 

 

附件中有相应的jar包

json-lib-2.1-jdk15.jar 是主要的

 

 

分享到:
评论
2 楼 lipulvp 2011-11-28  
LZ, 您在service层返回的list是一个对象,也能直接用JSONArray吗?
1 楼 LF_michael 2011-09-14  
貌似用不了,你那有测试过能用的版本哈?

相关推荐

    Jquery各种插件和JQuery Ajax三级联动地区下拉框 & 非Ajax实现三级联动

    NULL 博文链接:https://huigege.iteye.com/blog/1852954

    JQuery年月日三级下拉框联动

    在实现年月日联动下拉框时,主要依赖于JQuery的选择器功能来获取元素,以及事件监听和触发来实现联动效果。 首先,我们需要三个下拉框元素,分别代表年、月、日。在HTML代码中,为这三个元素设置ID以便后续JQuery...

    Ajax实现下拉框三级联动

    **Ajax实现下拉框三级联动**是Web开发中一种常见的交互设计,主要用于提高用户体验,让用户在选择一项数据时,能够即时地看到与之关联的下级数据,而无需等待整个页面重新加载。这种技术通常应用于地址选择、产品...

    Ajax 无限级 联动下拉框

    本文将深入探讨如何利用Ajax实现无限级联动下拉框的功能。 一、Ajax基础概念 Ajax的核心是通过JavaScript创建XMLHttpRequest对象,它允许在后台与服务器进行异步数据交换。JavaScript调用XMLHttpRequest对象的open...

    jquery三级下拉框联动

    "jquery三级下拉框联动"是指使用jQuery实现的多级下拉菜单联动效果,通常用于表示层次结构的数据,例如这里提到的城市级联,用户在选择省份后,下拉框会自动更新为对应省份的城市,再选择城市后,可能会进一步显示...

    ajax 三级联动

    Ajax三级联动是指在网页中,通常在下拉框中,当用户选择一级选项时,根据一级选项的数据动态加载二级选项;接着,选择二级选项后,再加载对应的三级选项。这种联动效果常见于地区选择、商品分类等场景,能够高效地...

    jQuery ajax 多级联动 下拉框 Demo

    ajax 实现 (全国,省,是,区....) N级联 Demo js: &lt;script type="text/javascript"&gt; $(function () { $.fn.CascadeSelect({ url: '/CascadeSelect/CascadeSelect.ashx', //返回Json数据的一般处理文件 idKey: ...

    AJAX三级联动(经典例子,自己以前项目中用过的,必须10分的资源)

    在这个经典例子中,我们看到它被应用于一个省、市、地区的选择菜单,通过AJAX实现三个下拉框的联动效果。下面我们将深入探讨这个技术及其在JAVA和JSP环境中的应用。 首先,我们要理解AJAX(Asynchronous JavaScript...

    Ajax三级联动 省市区

    在网页开发中,"Ajax三级联动 省市区" 是一种常见的交互设计,它利用Ajax技术实现省份、城市、区县三个级别的下拉菜单联动效果。这种设计在用户填写地址或者选择区域时提供了便捷的用户体验,用户只需选择一个级别,...

    php 三级联动下拉框

    在网页设计中,三级联动下拉框是一种常见的交互元素,特别是在数据层级结构比较复杂的场景下,如地区选择、产品分类等。它通过三个下拉菜单的级联关系,让用户能够逐步细化选择,从大类到小类,最终精确地选取目标...

    ajax三级联动

    在网页开发中,"ajax三级联动"是一种常见的交互设计,主要应用于下拉菜单或选择框,如城市选择,其中包含省、市、区三个级别。这种功能能够为用户提供流畅的体验,无需每次选择都刷新整个页面,提高了网页的响应速度...

    jquery+ASP做的三级联动,很不错

    在IT行业中,三级联动是一种常见的交互设计模式,尤其在网页的下拉菜单、地区选择、产品分类等场景中广泛使用。这里的"jquery+ASP做的三级联动"是一个利用jQuery库和ASP.NET技术实现的示例,旨在提供一种高效、动态...

    java Ajax三级联动--地区 省 市 区县

    文件`ajaxDemo`可能是前端实现AJAX联动的示例代码,可能包含了JavaScript函数、HTML结构以及与后端交互的逻辑。 总之,Java AJAX三级联动是Web开发中的常见实践,它利用了AJAX的异步特性,实现了高效、流畅的用户...

    使用Ajax和Jquery配合数据库实现下拉框的二级联动的示例

    在本文中,我们将探讨如何使用Ajax和jQuery配合数据库来实现下拉框的二级联动效果,这对于构建交互式、响应式的Web应用非常重要。二级联动通常指的是一个下拉框的选择会影响另一个下拉框的内容,例如在选择省份后,...

    使用JQuery实现漂亮的三级级联下拉框

    三级级联下拉框则是指三个互相联动的下拉菜单,当用户在一个下拉框中选择一个选项时,其他关联的下拉框会根据所选选项动态更新其内容。在本教程中,我们将探讨如何使用JavaScript库JQuery来实现这样的功能。 首先,...

    AJAX二级下拉框联动

    在网页开发中,AJAX(Asynchronous JavaScript and XML)二级下拉框联动是一种常见的交互设计,用于提升用户体验,尤其在处理复杂表单或选择结构化数据时。这种技术允许用户在一个下拉框中做出选择后,根据所选值...

    jquery省市县联动下拉框

    在网页开发中,"jQuery省市县联动下拉框"是一个常见的功能需求,它主要用于实现用户在选择省份时,对应的市和县下拉框能够自动更新,提供与所选省份匹配的选项。这种交互设计可以极大地提升用户体验,尤其在处理大量...

    sharepoint二级联动的下拉框控件

    SharePoint中的二级联动下拉框控件是一种交互式的用户界面元素,它允许用户在两个相关的下拉菜单中选择选项,这两个菜单通常是关联的,即在一个菜单中选择一个选项后,另一个菜单会根据所选选项动态更新其显示内容。...

Global site tag (gtag.js) - Google Analytics