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 }
数据库字段:
先想再做,不想不做。