<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    JavaDB+JSP+AJAX實現的級聯下拉菜單

    最近做的項目中涉及到5,6級的級聯菜單,用以前那種純JavaScript做起來實在是太低效了,頁面響應慢得跟286一樣。。。于是上網找AJAX實現的級聯菜單,找來找去找不到用DB+JSP+AJAX實現的。索性把人家的代碼拿來改了改,自己做了一個。
    我之所以采用這個代碼作為修改的藍本,是因為這個代碼的服務端處理程序返回的是標準的XML序列,客戶端的JavaScript通過
    var res = XMLHttpReq.responseXML.getElementsByTagName(String)
    的方式來解析這個XML序列,再通過類似于
    res[i].firstChild.data
    的方式遍歷這個XML序列,從而找到所要的數據。這樣可以實現比較大的數據的AJAX操作,比那些只返回簡單String的例子要好得多了!反正我最討厭手動解析字符串了!
    menu.jsp(文件的編碼也是UTF-8,我用EmEditor寫的,右下角那里可以更改文檔的編碼格式)

    <%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%>
    <%
        request.setCharacterEncoding(
    "UTF-8");
        response.setContentType(
    "text/html;charset=UTF-8");
    %>
    <html>
    <head>
    <META http-equiv=Content-Type content="text/html; charset=UTF-8">
    <!--LINK href="images/css.css" type=text/css rel=stylesheet-->
    </head>
    <%
        
    String driver = "org.apache.derby.jdbc.EmbeddedDriver";
        
    String dbName="/derby/demo/databases/toursdb";
        
    String connectionURL = "jdbc:derby:" + dbName; 
        Connection conn 
    = null;
        Statement st 
    = null;
        ResultSet rs 
    = null;
        List cities 
    = new ArrayList();

        try{
            Class.forName(driver); 
        } catch(java.lang.ClassNotFoundException e) {
            e.printStackTrace();
        }

        try {
            conn 
    = DriverManager.getConnection(connectionURL); 
            st
    =conn.createStatement();
            rs
    =st.executeQuery("SELECT distinct COUNTRY FROM cities order by COUNTRY");
            
    while (rs.next())
            {
                cities.add(rs.getString(
    1));
            }
            rs.close();
            st.close();
            conn.close();
        }  catch (Exception e)  {   
            e.printStackTrace();
        }
    %>
    <body>
    <script language="javascript">
    var XMLHttpReq;
        
    var currentSort;
         
    //創建XMLHttpRequest對象       
        function createXMLHttpRequest() {
            
    if(window.XMLHttpRequest) { //Mozilla 瀏覽器
                XMLHttpReq = new XMLHttpRequest();
            }
            
    else if (window.ActiveXObject) { // IE瀏覽器
                try {
                    XMLHttpReq 
    = new ActiveXObject("Msxml2.XMLHTTP");
                } 
    catch (e) {
                    
    try {
                        XMLHttpReq 
    = new ActiveXObject("Microsoft.XMLHTTP");
                    } 
    catch (e) {}
                }
            }
        }
        
    //發送請求函數
        function sendRequest(url) {
            createXMLHttpRequest();
            XMLHttpReq.open(
    "GET", url, true);
            XMLHttpReq.onreadystatechange 
    = processResponse;//指定響應函數
            XMLHttpReq.send(null);  // 發送請求
        }
        
    // 處理返回信息函數
        function processResponse() {
            
    if (XMLHttpReq.readyState == 4) { // 判斷對象狀態
                if (XMLHttpReq.status == 200) { // 信息已經成功返回,開始處理信息
                    updateMenu();
                } 
    else { //頁面不正常
                      alert("您所請求的頁面有異常。");
                }
            }
        }
        
    //更新菜單函數
        function updateMenu() {
            
    var res=XMLHttpReq.responseXML.getElementsByTagName("res")
            
    /**下面是用innerHTML輸出控件內容的一般用法**/
            
    //var subMenu = "";
            //for(var i = 0; i < res.length; i++) {
            //    subMenu = subMenu + "  " + res[i].firstChild.data + "";
            //}
            //currentSort.innerHTML = subMenu;
            
            
    var list = document.all.list;
            list.options.length
    =0;
            list.add(
    new Option("---請選擇---",""));
            
    for(var i=0;i<res.length;i++){
                list.add(
    new Option(res[i].firstChild.data,res[i].firstChild.data));
            }
        }
        
    // 創建級聯菜單函數
        function showSubMenu(obj) {
            
    //currentSort =document.getElementById(obj); 
            //currentSort.parentNode.style.display = "";
            sendRequest("menujsp.jsp?sort=" + obj);
            
    /**下面這一句的作用是:每次選擇后回到第一個選項**/
            
    //document.all.mli.options[0].selected=true;
        }

    </script>
    <select onchange="showSubMenu(this.options[this.options.selectedIndex].value)" name="mli"  style="width:150px">
    <option value=''>---請選擇---</option>
    <%
        
    for(int i=0;i<cities.size();i++)
        {
            out.println(
    "<option value='"+cities.get(i)+"'>"+cities.get(i)+"</option>");
        }
    %>
    </select>
    <select name="list" onchange="if(this.selectedIndex)alert(this.options[this.options.selectedIndex].value)" style="width:100px">
    <option name="">---請選擇---</option>
    </select>
    </body>
    </html>
    menujsp.jsp(文檔編碼格式也是UTF-8)
    <%@ page contentType="text/html; charset=UTF-8" import="java.util.*,java.sql.*" %>
    <%
        
    String sort=request.getParameter("sort");
        
    String driver = "org.apache.derby.jdbc.EmbeddedDriver";
        
    String dbName="/derby/demo/databases/toursdb";
        
    String connectionURL = "jdbc:derby:" + dbName; 
        Connection conn 
    = null;
        Statement st 
    = null;
        ResultSet rs 
    = null;
        List cities 
    = new ArrayList();

        
    try{
            
    Class.forName(driver); 
        } 
    catch(java.lang.ClassNotFoundException e) {
            e.printStackTrace();
        }

        
    try {
            conn 
    = DriverManager.getConnection(connectionURL); 
            st
    =conn.createStatement();
            rs
    =st.executeQuery("SELECT CITY_NAME FROM cities where COUNTRY='"+sort+"'");
            
    while (rs.next())
            {
                cities.add(rs.getString(
    1));
            }
            rs.close();
            st.close();
            conn.close();
        }  
    catch (Exception e)  {   
            e.printStackTrace();
        }
        response.setContentType(
    "text/xml; charset=UTF-8");
        response.setHeader(
    "Cache-Control""no-cache");
        out.println(
    "<response>");
        
    for(int i=0;i<cities.size();i++)
        {
            out.println(
    "<res>" + cities.get(i).toString() + "</res>");
        }
        out.println(
    "</response>");
        out.close();
    %
    >

    數據庫版本是:db-derby-10.3.1.4,可以去www.apache.org下載。
    把db-derby-10.3.1.4-bin.zip解壓到c:\derby下,用的示例數據庫是c:/derby/demo/databases/toursdb,注意路徑。
    然后把derby下的derby.jar解壓到用于啟動Tomcat的那個JRE的ext目錄下,重啟TOMCAT,打開瀏覽器,訪問menu.jsp即可看到效果。
    AJAX菜單效果圖
     
    三級聯動的效果:

    下載本例的JSP代碼:ajax_db_jsp_demo.rar
    三級聯動下拉菜單:three_ajax_select_with_db.zip

    posted on 2007-08-21 23:00 靈魂守護者 閱讀(12558) 評論(48)  編輯  收藏 所屬分類: AJAX

    評論

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2007-11-25 16:57 haohao

    不錯,頂~  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2007-11-30 10:41 shaomin

    謝謝分享
    收下了
      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2007-12-29 15:57 JITATA

    謝謝,好東西,收藏中。。。  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-01-22 14:50 游客

    照改了一下 很好!~~非常感謝 正在擴展中  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-03-15 16:17 jiangfeng

    太感謝了啊!  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2008-03-26 09:48 sunshine

    很好的東東!!!收藏ing  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-07-16 15:55 游客

    厲害啊  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-07-25 17:05 游客

    老板能說一下數據庫的結構嗎?  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-07-28 17:00 chaoskz

    正是我所需要的,頂,謝謝樓主分享!  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-08-03 00:41 斯蒂芬

    謝謝 LZ   回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-08-06 15:45 大帥

    res 獲取到的 length 是0
    但是獲取到的 response的length 卻是 1

    大哥幫忙呀。我這邊就是獲取不到 res
    我的email liufangmeng@163.com
    qq 76634102  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-08-08 09:11 hooo

    .getElementsByTagName("res")這句干么的呢,沒看到有res這個name啊,

    不懂賜教:tyc_boy@126.com  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-09-16 15:49 jokylin

    res 獲取到的 length 是0 ,怎么回事?有能運行的嗎?  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2008-09-23 22:19 啊啊

    謝謝分享  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-10-10 09:23 小妮

    非常謝謝!這個項目正需要這個  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2008-10-23 14:50 java初學者

    謝謝了  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-10-30 16:27 冰冰

    賜教!  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2008-11-03 14:03 xzy

    太感謝了  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-11-11 14:37 彩筆

    太 感謝 了 我 喲個問題想問下你 就是如果 我第二的下拉列表 也是鍵值對,怎么改寫 你的第二的列表是顯示內容和value一樣的 。  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2008-12-17 16:53 Tony

    為什么我全部照搬,結果卻是在改變contury后得到了出錯信息:“您所請求的頁面有異常...”

    HELP~~~  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2008-12-23 00:45 spirit_fly

    樓主,你很強大啊,感謝!  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2009-01-05 15:14 boy

    試過 很好~大概知道以后要怎樣弄下拉菜單了~多謝分享  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2009-03-01 15:45 1

    三級連動怎么會出現錯誤啊   回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2009-04-28 11:38 fabius

    list.add(new Option("---請選擇---",""));
    list.add(new Option(res[i].firstChild.data,res[i].firstChild.data));
    這兩條語句在firefox下運行會有問題,而在IE中運行則不會有問題。
    改成list.add(new Option("---請選擇---",""),null);之后運行正常
      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2009-06-16 17:14 Evan

    謝謝!非常感謝!  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2009-09-05 09:16 chengninger

    非常感謝  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2009-09-24 13:02 親切

    中文菜單如何實現?  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2010-01-18 17:59 bingyu

    我的也出現了這樣的情況,是什么原因呀
      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2010-01-18 18:00 wxx

    為什么我的照搬,結果卻是在改變contury后得到了出錯信息:“您所請求的頁面有異常...”
      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2010-01-19 16:23 小夏

    我 這里獲取不到res   回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2010-01-19 16:24 小雨

    我這里獲取不到res希望得到幫助
    xiashujv@163.com  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2010-04-02 11:23 呵呵

    有問題哦  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2010-04-02 11:34 呵呵

    有這樣一個問題 怎解決哦

    無法顯示 XML 頁。
    使用 樣式表無法查看 XML 輸入。請更正錯誤然后單擊 刷新按鈕,或以后重試。
    --------------------------------------------------------------------------------
    文檔的頂層無效。處理資源 'http://localhost:8080/guest_book/menujsp.jsp' 時出錯。


      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2010-04-02 11:36 游客

    有這樣一個問題怎么解決 能把解決后大的發到我的郵箱就好了jiangxian.ck98@163.com
    無法顯示 XML 頁。
    使用 樣式表無法查看 XML 輸入。請更正錯誤然后單擊 刷新按鈕,或以后重試。


    --------------------------------------------------------------------------------

    文檔的頂層無效。處理資源 'http://localhost:8080/guest_book/menujsp.jsp' 時出錯。


      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2010-04-06 11:49 游客

    我照搬你的 就是用MYSQL數據庫 其他的與數據庫有關的地方都改了 運行時沒錯,但是就是出不來二級菜單那里,樓主幫解決下。  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2010-04-16 19:02 jiajia

    謝謝,剛好用到,真好用,謝謝  回復  更多評論   

    # 使用JavaDB+JSP+AJAX實現的級聯下拉菜單異常,請求幫助 2010-08-19 17:54 liusufang

    為什么我的照搬,結果卻是在改變contury后得到了出錯信息:“您所請求的頁面有異常...” ?有知道原因的請發到我郵箱:white_fangzi@126.com,謝謝!
      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2010-09-03 22:16 461228344@qq.com

    @fabius
    照改了還是不行呀,還有老是亂碼,轉換了編碼也不行IE里沒問題
    461228344@qq.com  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2011-07-13 11:14 123

    能說一下數據庫的結構,急,急...  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2011-08-19 12:27 xinyuan.zhuang

    非常好!res是menujsp.jsp頁面的
      回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2011-08-19 12:29 xinyuan.zhuang

    var list = document.all.list;

    list:是<select name="list"   回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2011-08-23 15:59 作者

    經測試,該示例在Chrome 15 Dev,IE8,Maxthon3下工作正常。  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2011-08-23 16:05 作者

    提示數據庫路徑錯誤的朋友,不妨改一改兩個jsp頭部的這兩行吧。

        String dbName="/derby/demo/databases/toursdb";
        String connectionURL = "jdbc:derby:" + dbName; 
    改成
    String dbName="/demo/databases/toursdb";
    String connectionURL = "jdbc:derby:C:/SandBox/db-derby-10.8.1.2-bin" + dbName;   回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2011-08-23 16:07 作者

    示例用到的數據庫是Derby的Demo數據庫之一,下載Derby之后就有了,下載地址是http://db.apache.org/derby/releases/release-10.8.1.2.cgi  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2011-08-23 16:08 ducktsmt

    這個示例還是有很多需要完善的地方,謝謝大家的批評指正  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2012-01-04 09:14 William

    非常感謝分享這么好的東東  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單 2012-02-17 16:34 Gamehu

    bu錯  回復  更多評論   

    # re: JavaDB+JSP+AJAX實現的級聯下拉菜單[未登錄] 2012-03-28 17:53 s

    為什么照抄會出現空指針問題呢?  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    <2012年1月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    2930311234

    導航

    統計

    留言簿(1)

    文章分類(2)

    文章檔案(4)

    收藏夾(9)

    搜索

    最新評論

    主站蜘蛛池模板: 中文字幕永久免费| 国产亚洲av片在线观看播放 | 日本免费高清视频| 亚洲国产精品网站在线播放| 久久国产精品亚洲一区二区| va亚洲va日韩不卡在线观看| 中国在线观看免费高清完整版| 波多野结衣免费一区视频| 免费的黄色的网站| 中文字幕精品三区无码亚洲| 久久久久亚洲AV无码麻豆| 国产亚洲一区二区三区在线观看 | 婷婷国产偷v国产偷v亚洲| 亚洲www在线观看| 亚洲精品综合一二三区在线| 国产亚洲人成网站在线观看| 国产亚洲福利一区二区免费看| 日韩国产免费一区二区三区| 日韩精品久久久久久免费| 你好老叔电影观看免费| 一级做a免费视频观看网站| 久久精品国产亚洲av瑜伽| 亚洲中文字幕无码一去台湾| 亚洲美女免费视频| 亚洲AV乱码久久精品蜜桃 | 成人亚洲国产精品久久| 亚洲sm另类一区二区三区| 国产精品亚洲四区在线观看| 亚洲二区在线视频| 亚洲国产午夜精品理论片| 亚洲另类自拍丝袜第1页| www.亚洲日本| 亚洲an日韩专区在线| 亚洲国产综合自在线另类| 亚洲日韩中文字幕| 亚洲AV成人无码天堂| 亚洲大成色www永久网址| 亚洲日韩国产AV无码无码精品| 亚洲日韩精品国产一区二区三区 | 免费看a级黄色片| 日韩中文无码有码免费视频|