我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          Ajax實現二級聯動菜單

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

              
              
          function Change_Select(){//當第一個下拉框的選項發生改變時調用該函數
                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);
                   
          //指定回調函數為callback
                  req.onreadystatechange = callback;
                  req.send(
          null);
                }

              }

              
          //回調函數
              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>標記
                var select_root = document.getElementById('city');
                
          //獲得網頁中的第二個下拉框
                select_root.options.length=0;
                
          //每次獲得新的數據的時候先把每二個下拉框架的長度清0
                
                
          for(var i=0;i<xSel.length;i++){
                  
          var xValue = xSel[i].childNodes[0].firstChild.nodeValue;
                  
          //獲得每個<select>標記中的第一個標記的值,也就是<value>標記的值
                  var xText = xSel[i].childNodes[1].firstChild.nodeValue;
                  
          //獲得每個<select>標記中的第二個標記的值,也就是<text>標記的值
                  
                  
          var option = new Option(xText, xValue);
                  
          //根據每組value和text標記的值創建一個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">
                                      二級聯動示例
                                  
          </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);
                  
          // 獲得請求中參數為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>塘沽區</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
                  
          {// 如果是3,則返回下面的字符
                      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>";
                  }


                  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實現二級聯動菜單[未登錄]  回復  更多評論   

          呵呵,純手寫。
          不用Ajax框架。不錯!
          2008-05-30 17:56 |

          # re: Ajax實現二級聯動菜單  回復  更多評論   

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

          # re: Ajax實現二級聯動菜單  回復  更多評論   

          你試過了嗎?這個例子在我這運行并不亂碼。
          2008-08-29 07:00 | 々上善若水々
          主站蜘蛛池模板: 绥德县| 湖南省| 惠水县| 建湖县| 文安县| 濉溪县| 梁山县| 金川县| 仙桃市| 崇州市| 岚皋县| 雷山县| 孝昌县| 拜泉县| 泰顺县| 宁乡县| 白城市| 建始县| 特克斯县| 定襄县| 泾源县| 桃江县| 宝山区| 台南县| 永丰县| 卓尼县| 鄂尔多斯市| 通州区| 偏关县| 合水县| 黎城县| 榆树市| 建湖县| 武城县| 宣化县| 海淀区| 囊谦县| 宁陕县| 信宜市| 永修县| 江北区|