`

Ajax实现动态的二级级联菜单

 
阅读更多

博客地址:http://www.cnblogs.com/likailan/p/3328761.html

二:ajax实现级联菜单

前台页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="js/js.js"></script>
<title>Insert title here</title>
</head>
<body>
    <select id="district" onchange="cascade(this.value)" >
        <option value="-1">请选择</option>
        <c:forEach items="${districts }" var="district">
            <option value="${district.id }">${district.name }</option>
        </c:forEach>
    </select>
    <select id="street" onchange="alert(this.value)">
        <option>请选择</option>
    </select>
</body>
</html>

 js:

//XMLHttpRequest组件
var xhs;
//区域菜单的值发生改变时调用该方法,并把区域菜单当前的value传递进来
function cascade(id){
    //当id不大于0时,说明当前选择的是“请选择”这一项,则不做操作
    if(id>0){
        //请求字符串,把区域的id作为页面参数传到后台
        var url="cascade?id="+id;
        //创建XMLHttpRequest组件
        xhs=new XMLHttpRequest();
        //设置回调函数,processReuqest方法的定义在下面
        xhs.onreadystatechange=processReuqest;
        //打开与服务器的地址连接
        xhs.open("post", url, true);
        //发送请求
        xhs.send(null);
    }
}

//processReuqest方法作为回调方法
function processReuqest(){
    if(xhs.readyState==4){
        if(xhs.status==200){
            //创建新的select节点
            var newSelect=document.createElement("select");
            newSelect.id="street";
            //为新创建的select节点添加onchange事件,以便测试用
            newSelect.onchange=function test(){
                alert(this.value);
            };
            //为新创建的select节点添加option节点
            var op=document.createElement("option");
            op.value=-1;
            op.innerHTML="请选择";
            newSelect.appendChild(op);
            //得到完成请求后返回的字串符
            var str = xhs.responseText;
            //根据返回的字符串为新创建的select节点添加option节点
            var arr1=str.split(",");
            for(var i=0;i<arr1.length;i++){
                var arr2=arr1[i].split("=");
                var child=document.createElement("option");
                child.innerHTML=arr2[1];
                child.value=arr2[0];
                newSelect.appendChild(child);
            }
            //用新select节点替换旧的select节点
            var select = document.getElementById("street");
            document.body.replaceChild(newSelect, select);
        }
    }
}
function createXmlHttpRequest(){
    if(window.ActiveXObject){
        return new ActiveXObject("Microsoft.XMLHTTP");
    }else if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    }
}

 servlet

package cascade.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cascade.entity.District;
import cascade.entity.Street;
import cascade.service.StreetService;


public class CascadeServlet extends HttpServlet{

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        int id =Integer.parseInt(req.getParameter("id"));
        District district=new District();
        district.setId(id);
        
        /*
         * StreetService  ss为操作数据库的对象.
         * 调用该对象的getAllStreet()方法,可以从数据库中取得所有的区域信息,封装为List<Street>对象,并返回。
         * 其中Street是数据库Street表的实体类 
         * 为了把重点放在Ajax和级联菜单的实现上,本文省略了操作数据库的代码!!!
         */
        StreetService ss=new StreetService();
        List<Street> streets=ss.getAllStreet(district);
        //把得到的街道对象集合拼接成字符串文本
        StringBuffer sb=new StringBuffer();
        for(int i=0;i<streets.size();i++){
            sb.append(streets.get(i).getId()).append("=").append(streets.get(i).getName());
            if(i!=streets.size()-1){
                sb.append(",");
            }
        }
        //servlet不转向或重定向到任何页面,使用resp.getWriter().print()方法可以把文本响应给XMLHttpRequest对象
         PrintWriter out = resp.getWriter();
         out.print(sb.toString());
         out.flush();
         out.close();
    }
    
}

 

分享到:
评论

相关推荐

    jQuery+ajax实现三级级联

    在这个“jQuery+ajax实现三级级联”的实例中,我们主要探讨如何利用这两种技术来创建一个能够逐级联动的下拉菜单系统,这在数据筛选和表单填写中十分常见,如地区选择、部门分类等场景。 首先,jQuery是一个轻量级...

    JSP+AJAX+MYSQL实现二级级联菜单

    在IT领域,构建动态、交互性强的Web应用是常见的需求,而"JSP+AJAX+MYSQL实现二级级联菜单"就是一个典型的实例。这个技术组合主要用于创建能够实时更新且具有前后端交互功能的Web界面,使得用户在选择一级菜单时,...

    Ajax (jQuery) 全国城市三级级联菜单插件

    在本案例中,我们讨论的是使用jQuery库实现的全国城市三级级联菜单插件,它使得用户能够在下拉菜单中选择省份、城市以及区县,以实现快速筛选或输入数据的目的。 首先,jQuery是一个广泛使用的JavaScript库,它简化...

    二级级联菜单

    总结来说,这个项目结合了前端的jQuery交互与后端的MySQL数据获取,通过Servlet作为桥梁,实现了动态加载的二级级联菜单。这个过程中,前端和后端的紧密协作是关键,以确保用户体验流畅且数据实时更新。

    java/jsp 实现二级级联菜单

    实现二级级联菜单主要涉及以下几个步骤: 1. **数据库设计**: 在数据库层面,你需要创建一个表来存储类别信息,这个表通常包含`id`(唯一标识符)、`name`(类别名称)、`parent_id`(父类别ID)等字段。通过`...

    Jquery实现ajax二级级联查询

    本主题聚焦于“Jquery实现ajax二级级联查询”,这是一个常见的前端交互设计,常见于下拉菜单联动,例如省份选择后自动更新城市选择。在这个场景中,我们通常会利用服务器端(如JSP或Servlet)动态生成XML文件,因为...

    ajax实现二级级联(采用了递规调用)

    在网页开发中,二级级联菜单常常...通过学习这个知识点,开发者不仅可以掌握如何使用Ajax和递归实现二级级联菜单,还能了解到前后端协作、用户交互设计等方面的重要实践。这将有助于提升开发者的技能和项目实施能力。

    dwr实现2级级联菜单(sql2000 数据库)

    本篇文章将深入探讨如何利用DWR来实现一个两级级联菜单,并以SQL Server 2000数据库作为数据源。 首先,我们需要理解DWR的基本工作原理。DWR允许在后台执行Java方法并返回结果到前端,无需刷新整个页面。这种技术...

    java web下开发二级级联下拉菜单(数据库实现的)

    总之,通过结合Java Web技术和数据库,我们可以实现动态的二级级联下拉菜单,为用户提供直观且易于操作的界面。这个过程涉及到数据库设计、后端服务开发以及前端交互等多个环节,对提升开发者综合能力非常有帮助。

    ajax实现级联菜单的类子

    通过以上步骤,我们就可以利用Ajax实现一个从数据库动态获取数据的级联菜单。这种技术在实际项目中非常常见,因为它提供了流畅的用户体验,减少了不必要的页面刷新,提高了网页的交互性和效率。在开发过程中,应注重...

    jquery+ajax+jsp+servlet实现二级级联菜单

    ### 使用jQuery、Ajax、JSP与Servlet实现二级级联菜单 #### 一、项目背景与技术栈概述 本文档将详细介绍如何使用jQuery、Ajax、JSP与Servlet来实现一个简单的二级级联菜单功能。该功能常见于许多Web应用程序中,如...

    使用Ajax实现三级级联菜单获取区号与邮政编码 PHP MySQL

    在本文中,我们将深入探讨如何使用Ajax技术来实现一个三级级联菜单,该菜单能够动态地获取并显示区号和邮政编码。这个功能是通过PHP和MySQL数据库进行后端处理来实现的,使得用户能够在前端界面中流畅地选择地理位置...

    java实现Ajax级联菜单

    总结来说,这个"java实现ajax二级联菜单"的项目涉及到以下关键点: 1. Java Servlet:处理来自前端的Ajax请求,查询数据库并返回数据。 2. Ajax:使用JavaScript异步更新二级菜单,提高交互性。 3. HTML和...

    AJAX+ASP多级无限制级联菜单(地市版).

    在本例中,当用户在第一级菜单中选择一个城市,AJAX会发送一个异步请求到服务器,获取与该城市相关的下属区域数据,并在客户端动态渲染第二级菜单。 ASP是微软开发的一种服务器端脚本环境,用于生成动态交互式网页...

    javascript.和ajax实现二级联动菜单

    1、javascript实现二级联动:运用jsp标签拼写Javascript代码,实现一个二维数组,点击一级栏目时,查询二维数组里...2,ajax实现的二级联动:利用Ajax与后台程序实现异步交互,后台程序拼写JOSN字符串,发送到客户端。

    .netMVC架构下无刷新三级级联菜单源码

    本示例中的".net MVC架构下无刷新三级级联菜单源码"是一个典型的前端与后端交互场景,它展示了如何利用ASP.NET MVC框架以及DropdownList控件来实现一个动态的、无需页面刷新的三级级联菜单。这个菜单的数据是从...

    jsp+json+mySql 实现二级级联下拉菜单

    在本文中,我们将深入探讨如何使用JSP、JSON和MySQL来实现一个二级级联下拉菜单。这个功能常用于网站的表单设计中,让用户能够从相关联的分类中选择选项,例如省份与城市的选择。 首先,让我们了解这三个技术的核心...

    Ajax实现三级级联

    在Web开发中,"Ajax实现三级级联"是一种常见的交互技术,主要用于提升用户体验,使得用户在选择一项数据时,相关的下级数据能够自动更新而无需刷新整个页面。在这个场景中,例如省份、城市、区县的三级联动选择,...

    Ajax_实现级联菜单

    本文将详细介绍如何使用Ajax技术实现一个动态级联菜单功能,并通过具体的代码示例来展示整个过程。 #### 二、需求分析与设计思路 ##### 2.1 需求分析 本项目的目标是创建一个动态级联菜单,用户选择一级菜单后,二...

Global site tag (gtag.js) - Google Analytics