zoukankan      html  css  js  c++  java
  • javaweb基础----省市县三级联动(javascript版)

    说明:项目中需要用到json的工具包:flexjson-2.1.jar,这个工具包用于将后端数据库返回的list集合转换为字符串

      1 <script type="text/javascript">
      2             function getXHR() {
      3                 //定义一个变量,用来接收ajax核心引擎对象
      4                 var xmlhttp;
      5                 //判断当前浏览器
      6                 if(window.XMLHttpRequest) {
      7                     // code for IE7+, Firefox, Chrome, Opera, Safari
      8                     xmlhttp = new XMLHttpRequest();
      9                 } else {
     10                     // code for IE6, IE5
     11                     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
     12                 }
     13                 //将ajax核心引擎对象,返回给调用者
     14                 return xmlhttp;
     15             }
     16             window.onload = function() {
     17                 var xhr = getXHR();
     18                 //打开链接
     19                 xhr.open("POST", "${root }/loadProvinceServlet", true);
     20                 // 使用表单的方式 POST 数据
     21                 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
     22                 //发送数据
     23                 xhr.send("pid=0");
     24                 xhr.onreadystatechange = function() {
     25                     if(xhr.readyState == 4 && xhr.status == 200) {
     26                         var data = xhr.responseText;
     27                         //解析后台返回的数据
     28                         var arr = eval('('+data+')');
     29                         //获取省份的下拉框
     30                         var province = document.getElementById("province");
     31                         //遍历数组,将数组中所有的省份信息添加到下拉框中
     32                         for (i in arr) {
     33                             var p = arr[i];
     34                             var opt = document.createElement("option");
     35                             opt.setAttribute("value",p.id);
     36                             opt.innerHTML = p.name;
     37                             province.appendChild(opt);
     38                         }
     39                     }
     40                 }
     41 
     42             }
     43             function loadCity(pid) {
     44                 // 清空市下拉框中的所有选项
     45                 // 获取省份的下拉框
     46                 var city = document.getElementById("city");
     47                 city.options.length = 1;
     48                 // 清空县下拉框中的值
     49                 var district = document.getElementById("district");
     50                 district.options.length = 1;
     51                 // 需要对选择的值进行有效验证
     52                 if (!pid) return;
     53                 
     54                 // 1. 获取XMLHttpRequest对象
     55                 var xmlhttp = getXHR();
     56                 // 2. 监听服务器返回状态
     57                 xmlhttp.onreadystatechange = function() {
     58                     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
     59                         // 获取后台返回的结果
     60                         var data = xmlhttp.responseText;
     61                         // 根据结果进行相应的处理
     62                         
     63                         // 后台返回所有的省份信息,json格式:"[{id:1,name:"江苏"},{id:2,name:"上海"}]"
     64                         //var arr = JSON.parse(result); // 不推荐使用!
     65                         var arr = eval('(' + data + ')');
     66                         // 遍历数组,将数组中的所有的省份添加到下拉框中
     67                         for (i in arr) {
     68                             var p = arr[i];
     69                             var opt = document.createElement("option");
     70                             // <option value="1">江苏</option>
     71                             opt.setAttribute("value", p.id);
     72                             opt.innerHTML = p.name;
     73                             // 将创建好的option对象添加到下拉框中
     74                             city.appendChild(opt);
     75                         }
     76                     }
     77                 }
     78                 // 3. 打开连接
     79                 xmlhttp.open("POST", "${root }/loadProvinceServlet", true);
     80                 // 使用表单的方式 POST 数据
     81                 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
     82                 // 4. 发送请求
     83                 xmlhttp.send("pid=" + pid);
     84             }
     85             function loadDist(pid) {
     86                 // 获取县的下拉框,清空其中的值
     87                 var district = document.getElementById("district");
     88                 //district.length = 1;// 不推荐
     89                 district.options.length = 1; // 推荐!!!
     90                 
     91                 // 需要对选择的值进行有效验证
     92                 if (!pid) return;
     93                 // 1. 获取XMLHttpRequest对象
     94                 var xmlhttp = getXHR();
     95                 // 2. 监听服务器返回状态
     96                 xmlhttp.onreadystatechange = function() {
     97                     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
     98                         // 获取后台返回的结果
     99                         var data = xmlhttp.responseText;
    100                         // 根据结果进行相应的处理
    101                         
    102                         // 后台返回所有的省份信息,json格式:"[{id:1,name:"江苏"},{id:2,name:"上海"}]"
    103                         //var arr = JSON.parse(result); // 不推荐使用!
    104                         var arr = eval('(' + data + ')');
    105                         // 遍历数组,将数组中的所有的县添加到下拉框中
    106                         for (i in arr) {
    107                             var p = arr[i];
    108                             var opt = document.createElement("option");
    109                             // <option value="1">江苏</option>
    110                             opt.setAttribute("value", p.id);
    111                             opt.innerHTML = p.name;
    112                             // 将创建好的option对象添加到下拉框中
    113                             district.appendChild(opt);
    114                         }
    115                     }
    116                 }
    117                 // 3. 打开连接
    118                 xmlhttp.open("POST", "${root }/loadProvinceServlet", true);
    119                 // 使用表单的方式 POST 数据
    120                 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    121                 // 4. 发送请求
    122                 xmlhttp.send("pid=" + pid);
    123             }
    124 
    125         </script>

    后端servlet代码:

     1     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     2         //1.获取请求参数,根据pid查询所有子集区域
     3         int pid = Integer.parseInt(request.getParameter("pid"));
     4         //2.调用service方法查询数据
     5         ProvinceService ps = new ProvinceServiceImpl();
     6         List<PCD> areaList = ps.load(pid);
     7         //使用flexjson解析返回集合
     8         JSONSerializer serializer =new JSONSerializer();
     9         serializer = serializer.exclude("calss","pid");//移除不需要的字段
    10         String data = serializer.serialize(areaList);
    11 //        serializer.deepSerialize(areaList);//可以深度解析javabean中的list map集合
    12         //3.页面响应给前端展示
    13         response.getWriter().write(data);
    14     }
    15     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    16         doGet(request, response);
    17     }

    数据库字段:

    先想再做,不想不做。
  • 相关阅读:
    jquery 添加关键字小插件
    打印出所有每一位都与其他位不重复的自然数
    尾递归版,斐波那契数列
    如何在移动端宽度自适应实现正方型?
    css隐藏元素的六类13种方法
    如何给行内元素设置宽高?
    css实现垂直水平居中的方法
    pwa
    目录树生成工具treer
    服务端返回的json数据,导致前端报错的原因及解决方法
  • 原文地址:https://www.cnblogs.com/cjasonvincent/p/8623741.html
Copyright © 2011-2022 走看看