AJAX與JSON結合實現省市下拉框聯動

 1.jsp註冊頁面:register.jsp

  1. <%@page pageEncoding="GBK" contentType="text/html; charset=GBK" %> 
  2. <html> 
  3. <head> 
  4. <meta http-equiv="Content-Type" content="text/html; charset=GBK"/> 
  5. <title>註冊頁面</title> 
  6. <script type="text/javascript"> 
  7. //通用寫法,意在獲取不同瀏覽器的AJAX請求對象    
  8. function createXmlHttpRequest(){    
  9.     var xmlHttp;     
  10.     try{                  
  11.         // Firefox, Opera 8.0+, Safari   
  12.         xmlHttp=new XMLHttpRequest();     
  13.     }    
  14.     catch (e){    
  15.         // Internet Explorer     
  16.         try {  
  17.             xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");    
  18.         }    
  19.         catch (e){    
  20.             try {    
  21.                 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");    
  22.             }   
  23.             catch (e){    
  24.                 alert("您的瀏覽器不支持AJAX!");    
  25.                 return false;    
  26.             }   
  27.         }   
  28.     }   
  29.     return xmlHttp;  
  30. }  
  31.  
  32. //省下拉框初始化          
  33. function selSheng(){     
  34.     var request = createXmlHttpRequest();//創建request對象   
  35.     var json;  
  36.     request.open("post","nation.do?method=getSheng",true);//建立到服務器的新請求   
  37.     request.send();//向服務器發送請求   
  38.     request.onreadystatechange=function()//指定當readyState屬性改變時的事件處理句柄   
  39.     {  
  40.         if (request.readyState==4)//提取當前HTTP的就緒狀態,狀態4表示:響應已完成,可以訪問服務器響應並使用它   
  41.         if (request.status==200)//HTTP狀態,我們期望的狀態碼是 200,它表示一切順利。   
  42.         //如果就緒狀態是 4 而且狀態碼是 200,就可以處理服務器的數據了,而且這些數據應該就是要求的數據   
  43.         {  
  44.             json = eval("("+request.responseText+")");//服務器返回響應文本 並解析  
  45.             var ooption;  
  46.             var sel = document.getElementById("sheng");  
  47.             for(var i=0,n=json.nation.length;i<n;i++)  
  48.             {  
  49.                 ooption = document.createElement('option');  
  50.                 ooption.value=json.nation[i].DM;  
  51.                 ooption.innerHTML=json.nation[i].MC;    
  52.                 sel.appendChild(ooption);   
  53.             }  
  54.         }   
  55.     }             
  56. }   
  57.  
  58. //市下拉框初始化 
  59. function selShi(){     
  60.     var request = createXmlHttpRequest();//創建request 對象   
  61.     var json;  
  62.     var sheng = document.getElementById("sheng").value;  
  63.     request.open("post","nation.do?method=getShi&sheng="+sheng,true);//建立到服務器的新請求   
  64.     request.send();//向服務器發送請求   
  65.     request.onreadystatechange=function()//指定當readyState屬性改變時的事件處理句柄   
  66.     {  
  67.         if (request.readyState==4)//提取當前HTTP的就緒狀態,狀態4表示:響應已完成,可以訪問服務器響應並使用它   
  68.         if (request.status==200)//HTTP狀態,我們期望的狀態碼是 200,它表示一切順利。   
  69.         //如果就緒狀態是 4 而且狀態碼是 200,就可以處理服務器的數據了,而且這些數據應該就是要求的數據   
  70.         {  
  71.             json = eval("("+request.responseText+")");//服務器返回響應文本 並解析  
  72.             var ooption;  
  73.             var sel = document.getElementById("shi");  
  74.             sel.length=1;  
  75.             for(var i=0,n=json.nation.length;i<n;i++)  
  76.             {  
  77.                 ooption = document.createElement('option');  
  78.                 ooption.value=json.nation[i].DM;  
  79.                 ooption.innerHTML=json.nation[i].MC;    
  80.                 sel.appendChild(ooption);   
  81.             }  
  82.         }   
  83.     }   
  84. }    
  85. </script>     
  86. </head> 
  87. <body> 
  88. <form action="RegisterServlet.servlet" method="POST"> 
  89. <table align="center"> 
  90. <tr> 
  91.     <td>學號:</td> 
  92.     <td> 
  93.         <input type="text" name="xueHao"> 
  94.     </td> 
  95. </tr> 
  96. <tr> 
  97.     <td>姓名:</td> 
  98.     <td> 
  99.         <input type="text" name="userName"> 
  100.     </td> 
  101. </tr> 
  102. <tr> 
  103.     <td>密碼:</td> 
  104.     <td> 
  105.         <input type="password" name="password"> 
  106.     </td> 
  107. </tr> 
  108. <tr> 
  109.     <td>性別:</td> 
  110.     <td> 
  111.         <input type='radio' name='sex' value='1'>男  
  112.         <input type='radio' name='sex' value='0'>女  
  113.     </td> 
  114. </tr> 
  115. <tr> 
  116.     <td>出生日期:</td> 
  117.     <td> 
  118.         <input type="text" name="birthday"> 
  119.     </td> 
  120. </tr> 
  121. <tr> 
  122.     <td>郵箱:</td> 
  123.     <td> 
  124.         <input type="text" name="email"> 
  125.     </td> 
  126. </tr> 
  127. <tr> 
  128.     <td>聯繫電話:</td> 
  129.     <td> 
  130.         <input type="text" name="phone"> 
  131.     </td> 
  132. </tr> 
  133. <tr> 
  134.     <td>生源地: </td> 
  135.     <td> 
  136.         <select name="sheng" id="sheng" onchange="selShi()"> 
  137.             <option value="0">-----請選擇-----</option> 
  138.         </select>省  
  139.         <select name="shi" id="shi"> 
  140.             <option value="0">-----請選擇-----</option> 
  141.         </select>市  
  142.     </td> 
  143. </tr> 
  144. <tr> 
  145.     <td align="center"> 
  146.         <input type="submit" value="註冊"> 
  147.     </td> 
  148.     <td> 
  149.         <input type="button" value="返回" onclick="window.location.href('index.jsp')"> 
  150.     </td> 
  151. </tr> 
  152.   </table> 
  153.  </form> 
  154.    
  155. <script type="text/javascript">selSheng();</script> 
  156. </body> 
  157. </html> 

2.web.xml配置servlet:

  1. <servlet>   
  2.   <servlet-name>nation</servlet-name>   
  3.   <servlet-class>com.servlet.AjaxServlet</servlet-class>   
  4. </servlet>   
  5. <servlet-mapping>   
  6.   <servlet-name>nation</servlet-name>   
  7.   <url-pattern>/nation.do</url-pattern>     
  8. </servlet-mapping>  

3.創建AjaxServlet類繼承於HttpServlet抽象類:AjaxServlet.java

  1. package com.servlet;  
  2.  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.  
  8. import javax.servlet.http.HttpServlet;  
  9. import javax.servlet.http.HttpServletRequest;  
  10. import javax.servlet.http.HttpServletResponse;  
  11.  
  12. import com.service.UserService;  
  13.  
  14. public class AjaxServlet extends HttpServlet  
  15. {  
  16.  
  17.     /**  
  18.      * {字段功能描述}  
  19.      */ 
  20.     private static final long serialVersionUID = -5798085591055475615L;  
  21.     /**  
  22.      *   
  23.      * {獲取ajax發送的請求}  
  24.      *   
  25.      * @param request  
  26.      * @param response  
  27.      * @throws IOException  
  28.      * @author:LJ  
  29.      */ 
  30.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {   
  31.         String selValue=request.getParameter("method");  
  32.         if("getSheng".equals(selValue))  
  33.         {  
  34.             this.getSheng(request, response);  
  35.         }  
  36.         else if("getShi".equals(selValue))  
  37.         {  
  38.             this.getShi(request, response);  
  39.         }  
  40.     }   
  41.     /**  
  42.      *   
  43.      * {獲取省列表}  
  44.      *   
  45.      * @param request  
  46.      * @param response  
  47.      * @throws IOException  
  48.      * @author:LJ  
  49.      */ 
  50.     @SuppressWarnings("unchecked")  
  51.     protected void getSheng(HttpServletRequest request, HttpServletResponse response) throws IOException {   
  52.         List<Map> selList = new ArrayList<Map>();  
  53.         UserService userService = new UserService();  
  54.         selList = userService.querySheng();  
  55.         //拼接json格式文本  
  56.         StringBuffer jsonStr = new StringBuffer();  
  57.         jsonStr.append("{\"nation\":[");  
  58.         for(Map map:selList)  
  59.         {  
  60.             jsonStr.append("{\"DM\":");  
  61.             jsonStr.append(map.get("DM"));  
  62.             jsonStr.append(",\"MC\":\"");  
  63.             jsonStr.append(map.get("MC"));  
  64.             jsonStr.append("\"},");  
  65.         }  
  66.         jsonStr.deleteCharAt(jsonStr.length()-1);  
  67.         jsonStr.append("]}");  
  68.         //將json文本返回  
  69.         response.getWriter().print(jsonStr.toString());   
  70.     }   
  71.     /**  
  72.      *   
  73.      * {獲取對應省的市列表}  
  74.      *   
  75.      * @param request  
  76.      * @param response  
  77.      * @throws IOException  
  78.      * @author:LJ  
  79.      */ 
  80.     @SuppressWarnings("unchecked")  
  81.     protected void getShi(HttpServletRequest request, HttpServletResponse response) throws IOException {   
  82.         String selValue=request.getParameter("sheng");  
  83.         List<Map> selList = new ArrayList<Map>();  
  84.         UserService userService = new UserService();  
  85.         selList = userService.queryShi(selValue);  
  86.         //拼接json格式文本  
  87.         StringBuffer jsonStr = new StringBuffer();  
  88.         jsonStr.append("{\"nation\":[");  
  89.         for(Map map:selList)  
  90.         {  
  91.             jsonStr.append("{\"DM\":");  
  92.             jsonStr.append(map.get("DM"));  
  93.             jsonStr.append(",\"MC\":\"");  
  94.             jsonStr.append(map.get("MC"));  
  95.             jsonStr.append("\"},");  
  96.         }  
  97.         jsonStr.deleteCharAt(jsonStr.length()-1);  
  98.         jsonStr.append("]}");  
  99.         //將json文本返回  
  100.         response.getWriter().print(jsonStr.toString());   
  101.     }   

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章