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     }

 

數據庫字段:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM