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" οnchange="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");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值