当前位置: 代码迷 >> JavaScript >> AJAX级联菜单范例,js
  详细解决方案

AJAX级联菜单范例,js

热度:396   发布时间:2012-11-06 14:07:00.0
AJAX级联菜单实例,js
AJAX级联菜单实例

说明 ajax级联菜单,例如,一级菜单选择中国,二级菜单列出中国城市;一级菜单选择美国,二级菜单列出美国城市。

数据库脚本 count.sql

DROP TABLE IF EXISTS `country`;

CREATE TABLE `country` (

`id` int(11) NOT NULL auto_increment,

`name` varchar(50) default NULL,

`city` varchar(50) default NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;


insert into country values(1,'中国','沈阳') ;

insert into country values(2,'中国','北京') ;

insert into country values(3,'美国','洛杉矶') ;

insert into country values(4,'美国','纽约') ;


DAO

package edu.syict.www.dao;


import java.util.List;


import org.hibernate.HibernateException;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.Transaction;


import edu.syict.www.HibernateSessionFactory;


public class DBOperator {

       @SuppressWarnings("unchecked")

       public List queryByName(String name){

              Session session = HibernateSessionFactory.getSession();

              List list=null ;

              String hql="SELECT co.city FROM Country AS co WHERE co.name=?" ;

              System.out.println(hql+name);

              Transaction tx = null;    

              try {

                     tx = session.beginTransaction();

                     Query query=session.createQuery(hql) ;

                     query.setString(0, name) ;

                     list=query.list() ;

                     System.out.println("数据库中记录个数:"+list.size()) ;

                     tx.commit() ;

              } catch (HibernateException e) {

                     if (tx != null)

                            tx.rollback();

                     throw e;

              }finally{

                     session.close();

              }    

              return list ;

       }

}



Bean类(Hibernate反向工程)Country.java

package edu.syict.www.POJO;

@SuppressWarnings("serial")

public class Country implements java.io.Serializable {

       private Integer id;

       private String name;

       private String city;


       public Country() {

       }

       public Country(String name, String city) {

              this.name = name;

              this.city = city;

       }

       public Integer getId() {

              return this.id;

       }

       public void setId(Integer id) {

              this.id = id;

       }

       public String getName() {

              return this.name;

       }

       public void setName(String name) {

              this.name = name;

       }

       public String getCity() {

              return this.city;

       }

       public void setCity(String city) {

              this.city = city;

       }

}


Country.hbm.xml

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">


<hibernate-mapping>

    <class name="edu.syict.www.POJO.Country" table="country" catalog="test">

       <id name="id" type="java.lang.Integer">

            <column name="id" />

            <generator class="identity" />

        </id>

        <property name="name" type="java.lang.String">

            <column name="name" length="50" />

        </property>

        <property name="city" type="java.lang.String">

            <column name="city" length="50" />

        </property>

    </class>

</hibernate-mapping>



JSP页面

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ page import="java.util.*" %>

<%@ page import="edu.syict.www.dao.*" %>

<%@ page import="edu.syict.www.POJO.*" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

    <title>My JSP 'menu.jsp' starting page</title>

</head>


<body>

<%

    Country c=null ;

    DBOperator dbo=new DBOperator() ;

    List listname=dbo.query("SELECT DISTINCT co.name FROM Country AS co") ;

    List listcity=dbo.query("SELECT DISTINCT co.city FROM Country AS co") ;

   

%>

<center>

<script type="text/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) { // 信息已经成功返回,开始处理信息XMLHttpReq.status == 200

                updateMenu();

            } else { //页面不正常

                  alert("您所请求的页面有异常。");

            }

        }

    }

    //更新菜单函数

    function updateMenu() {

        var res=XMLHttpReq.responseXML.getElementsByTagName("res") ;

        //alert("res===="+res[0].firstChild.nodeValue);

        /**下面是用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.nodeValue,res[i].firstChild.nodeValue));

        }

    }

    // 创建级联菜单函数

    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 name="mli" onchange="showSubMenu(this.options[this.options.selectedIndex].value)" style="width:150px;">

           <option value="">---bbb---</option>

    <%

    for(int i=0;i<listname.size();i++){

           //c=(Country)listname.get(i) ;

           out.println("<option value='"+listname.get(i)+"'>"+listname.get(i)+"</option>") ;

    }

    %>

    </select>

    <select name="list" style="width:100px;">

           <option value="">---aaa---</option>

    <%

    for(int i=0;i<listcity.size();i++){

           out.println("<option value='"+listcity.get(i)+"'>"+listcity.get(i)+"</options>") ;

    }

    %>

    </select>

    <br>

</center>

</body>

</html>



JSP页面后台

<%@ page language="java" pageEncoding="UTF-8"%>

<%@ page import="java.util.*" %>

<%@ page import="edu.syict.www.dao.*" %>

<%@ page import="edu.syict.www.POJO.*" %>


<%

       response.setContentType("text/xml; charset=UTF-8");

       response.setHeader("Cache-Control","no-cache");

      

       String sort=request.getParameter("sort") ;

      

       sort=new String(sort.getBytes("ISO8859-1"),"GB2312") ;

      

       System.out.println("转换编码后sort:"+sort) ;

      

       DBOperator dbo=new DBOperator() ;

       List cityes=new ArrayList() ;

       try{

              cityes=dbo.queryByName(sort) ;

       }catch(Exception e){

              e.printStackTrace() ;

       }

       out.println("<response>");

              for(int i=0;i<cityes.size();i++){

                     out.println("<res>"+cityes.get(i).toString()+"</res>") ;

                     System.out.println(cityes.get(i)) ;

              }

       out.println("</response>");

%>



js传参数乱码

前端l两次encode

var unitNm = encodeURI(encodeURI(unitNm));



action中decode

unitNm = URLDecoder.decode(unitNm,"UTF-8");

  相关解决方案