我的漫漫程序之旅

          專注于JavaWeb開發(fā)
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數(shù)據(jù)加載中……

          Ajax實現(xiàn)二級聯(lián)動菜單

          index.jsp:
          <%@ page language="java" pageEncoding="UTF-8"%>
          <html>
              
          <head>
                  
          <title>二級菜單聯(lián)動演示</title>
                  
          <script type="text/javascript">
              
          var req;
              window.onload
          =function()
              
          {//頁面加載時的函數(shù)
              }

              
              
          function Change_Select(){//當(dāng)?shù)谝粋€下拉框的選項發(fā)生改變時調(diào)用該函數(shù)
                var province = document.getElementById('province').value;
                
          var url = "select?id="+ escape(province);
                
          if(window.XMLHttpRequest){
                  req 
          = new XMLHttpRequest();
                }
          else if(window.ActiveXObject){
                  req 
          = new ActiveXObject("Microsoft.XMLHTTP");
                }

                
          if(req){
                  req.open(
          "GET",url,true);
                   
          //指定回調(diào)函數(shù)為callback
                  req.onreadystatechange = callback;
                  req.send(
          null);
                }

              }

              
          //回調(diào)函數(shù)
              function callback(){
                
          if(req.readyState ==4){
                  
          if(req.status ==200){
                    parseMessage();
          //解析XML文檔
                  }
          else{
                    alert(
          "不能得到描述信息:" + req.statusText);
                  }

                }

              }

              
          //解析返回xml的方法
              function parseMessage(){
                
          var xmlDoc = req.responseXML.documentElement;//獲得返回的XML文檔
                var xSel = xmlDoc.getElementsByTagName('select');
                
          //獲得XML文檔中的所有<select>標(biāo)記
                var select_root = document.getElementById('city');
                
          //獲得網(wǎng)頁中的第二個下拉框
                select_root.options.length=0;
                
          //每次獲得新的數(shù)據(jù)的時候先把每二個下拉框架的長度清0
                
                
          for(var i=0;i<xSel.length;i++){
                  
          var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
                  
          //獲得每個<select>標(biāo)記中的第一個標(biāo)記的值,也就是<value>標(biāo)記的值
                  var xText = xSel[i].childNodes[1].firstChild.nodeValue;
                  
          //獲得每個<select>標(biāo)記中的第二個標(biāo)記的值,也就是<text>標(biāo)記的值
                  
                  
          var option = new Option(xText, xValue);
                  
          //根據(jù)每組value和text標(biāo)記的值創(chuàng)建一個option對象
                  
                  
          try{
                    select_root.add(option);
          //將option對象添加到第二個下拉框中
                  }
          catch(e){
                  }

                }

              }
                  
            
          </script>
              
          </head>

              
          <body>
                  
          <div align="center">
                      
          <form name="form1" method="post" action="">
                          
          <table width="70%" border="0" cellspacing="0" cellpadding="0">
                              
          <tr>
                                  
          <td align="center">
                                      二級聯(lián)動示例
                                  
          </td>
                              
          </tr>
                              
          <tr>
                                  
          <td>
                                      
          <select name="province" id="province" onChange="Change_Select()">
                                          
          <!--第一個下拉菜單-->
                                          
          <option value="0">
                                              請選擇
                                          
          </option>
                                          
          <option value="1">
                                              北京
                                          
          </option>
                                          
          <option value="2">
                                              天津
                                          
          </option>
                                          
          <option value="3">
                                              山東
                                          
          </option>
                                      
          </select>
                                      
          <select name="city" id="city">
                                          
          <!--第二個下拉菜單-->
                                          
          <option value="0">
                                              請選擇
                                          
          </option>
                                      
          </select>
                                  
          </td>
                              
          </tr>
                              
          <tr>
                                  
          <td>
                                  
          </td>
                              
          <tr>
                          
          </table>
                      
          </form>
                  
          </div>
              
          </body>
          </html>

          SelectServlet:
          package com;

          import java.io.IOException;

          import javax.servlet.ServletException;
          import javax.servlet.http.HttpServlet;
          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;
          /***
           * 
           * 
          @author zdw
           *
           
          */

          public class SelectServlet extends HttpServlet
          {

              
          private static final long serialVersionUID = 1L;

              
          public SelectServlet()
              
          {
                  
          super();
              }


              
          public void destroy()
              
          {
                  
          super.destroy();
              }


              
          public void doGet(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException
              
          {
          //        response.setCharacterEncoding("GBK");
                  response.setContentType("text/xml");
                  response.setHeader(
          "Cache-Control""no-cache");
                  request.setCharacterEncoding(
          "GBK");
                  response.setCharacterEncoding(
          "UTF-8");
                  String targetId 
          = request.getParameter("id").toString();
                  System.out.println(targetId);
                  
          // 獲得請求中參數(shù)為id的值
                  String xml_start = "<selects>";
                  String xml_end 
          = "</selects>";
                  String xml 
          = "";

                  
          if (targetId.equalsIgnoreCase("0"))
                  
          {
                      xml 
          = "<select><value>0</value><text>請選擇</text></select>";
                  }
           else if (targetId.equalsIgnoreCase("1"))
                  
          {
                      xml 
          = "<select><value>1</value><text>昌平</text></select>";
                      xml 
          += "<select><value>2</value><text>豐臺</text></select>";
                      xml 
          += "<select><value>3</value><text>海淀</text></select>";
                      xml 
          += "<select><value>4</value><text>朝陽</text></select>";
                  }
           else if (targetId.equalsIgnoreCase("2"))
                  
          {
                      xml 
          = "<select><value>1</value><text>塘沽區(qū)</text></select>";
                      xml 
          += "<select><value>2</value><text>漢沽區(qū)</text></select>";
                      xml 
          += "<select><value>3</value><text>大港區(qū)</text></select>";
                      xml 
          += "<select><value>4</value><text>東麗區(qū)</text></select>";
                  }
           else
                  
          {// 如果是3,則返回下面的字符
                      xml = "<select><value>1</value><text>濟(jì)南</text></select>";
                      xml 
          += "<select><value>2</value><text>青島</text></select>";
                      xml 
          += "<select><value>3</value><text>淄博</text></select>";
                      xml 
          += "<select><value>4</value><text>棗莊</text></select>";
                  }


                  String last_xml 
          = xml_start + xml + xml_end;
                  response.getWriter().write(last_xml);

              }


              
          public void doPost(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException
              
          {
                  doGet(request, response);
              }


              
          public void init() throws ServletException
              
          {
              }


          }


          web.xml:
          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
              xmlns:xsi
          ="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation
          ="http://java.sun.com/xml/ns/j2ee 
              http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
          >
              
          <servlet>
                  
          <servlet-name>SelectServlet</servlet-name>
                  
          <servlet-class>com.SelectServlet</servlet-class>
              
          </servlet>

              
          <servlet-mapping>
                  
          <servlet-name>SelectServlet</servlet-name>
                  
          <url-pattern>/select</url-pattern>
              
          </servlet-mapping>
              
          <welcome-file-list>
                  
          <welcome-file>index.jsp</welcome-file>
              
          </welcome-file-list>
          </web-app>
          源碼下載


          posted on 2008-05-29 09:12 々上善若水々 閱讀(11352) 評論(3)  編輯  收藏 所屬分類: AJAX

          評論

          # re: Ajax實現(xiàn)二級聯(lián)動菜單[未登錄]  回復(fù)  更多評論   

          呵呵,純手寫。
          不用Ajax框架。不錯!
          2008-05-30 17:56 | 風(fēng)

          # re: Ajax實現(xiàn)二級聯(lián)動菜單  回復(fù)  更多評論   

          哥們,你這從Servlet里返回的數(shù)據(jù)是亂碼呀
          2008-08-27 21:06 | 麥田守望者

          # re: Ajax實現(xiàn)二級聯(lián)動菜單  回復(fù)  更多評論   

          你試過了嗎?這個例子在我這運(yùn)行并不亂碼。
          2008-08-29 07:00 | 々上善若水々
          主站蜘蛛池模板: 钟祥市| 呼图壁县| 正定县| 阿勒泰市| 惠安县| 墨脱县| 岳普湖县| 冷水江市| 张家川| 噶尔县| 龙州县| 吴川市| 饶河县| 三江| 宝兴县| 滨州市| 台中县| 荥阳市| 大名县| 洛阳市| 肃宁县| 永顺县| 都兰县| 闸北区| 鄱阳县| 揭东县| 肃北| 宁波市| 竹溪县| 宜都市| 云梦县| 道孚县| 麻江县| 都江堰市| 华坪县| 扶沟县| 南通市| 宁海县| 台江县| 安福县| 曲麻莱县|