`
aijuans
  • 浏览: 1547851 次
社区版块
存档分类
最新评论

Ajax的常用技巧(2)---实现Web页面中的级联菜单

    博客分类:
  • Ajax
阅读更多

在网络上显示数据,往往只显示数据中的一部分信息,如文章标题,产品名称等。如果浏览器要查看所有信息,只需点击相关链接即可。在web技术中,可以采用级联菜单完成上述操作。根据用户的选择,动态展开,并显示出对应选项子菜单的内容。
在传统的web实现方式中,一般是在页面初始化时动态获取到服务端数据库中对应的所有子菜单中的信息,放置到页面中对应的位置,然后再结合CSS层叠样式表动态控制对应子菜单的显示或者隐藏。采用这种方法的弊端在于会造成浏览端下载的页面非常冗余,许多根本用不到的信息也必须提前装载到页面中。而如果借用Ajax技术,可以实现当用户选择对应的菜单项后,将对应的请求以异步的方式提交到服务端,然后又选择地从服务器端获取到对应的子菜单信息,在返回浏览器进行响应显示。
  现在创建一个实例,以演示使用Ajax技术实现级联菜单的操作。在该实例中根据用户选择的作者名称,在子菜单中显示对应的个人信息。为了减少程序的复杂度,这里没有采用数据库中的数据实现。

1,服务器端的代码


本实例服务器端的代码主要实现依据客户端发送的数据,产生不同的相应信息。打开记事本,输入下列代码:

<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%
String sort=request.getParameter("sort");
String contents1="";
String contents2="";
if(sort.equals("IBM")){
contents1="岗位:责任编辑";
contents2="联系方式:15651865007";
}
else{
contents1="岗位:策划编辑";
contents2="联系方式:15298381049";
}
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control","no-cache");
out.println("<response>");
out.println("<res>"+contents1+"</res>");
out.println("<res>"+contents2+"</res>");
out.println("</response>");
out.close();
%>


将上述代码保存,名称为menujsp.jsp。在该文件中,使用request对象获取客户端传送的变量sort的值。创建两个变量contents1和contents2,依据客户端传送的数值,给变量contents1和contents2赋不同的值,然后使用response对象,将contents1和contents2的值,以xml文件格式返回给客户端。

2,客户端代码

本实例客户端代码主要实现异步数据传输,并依据服务端返回的数据显示。打开记事本,输入下列代码:

<%@ page contentType="text/html; charset=gb2312"  import="java.sql.*" errorPage="" %>
<head>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<LINK href="images/css.css" type=text/css rel=stylesheet>
</head>
<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")
	    var subMenu = "";
	    for(var i = 0; i < res.length; i++) {
	        subMenu = subMenu + "  " + res[i].firstChild.data + "<br>";
	    }
		currentSort.innerHTML = subMenu;
	}
	// 创建级联菜单函数
	function showSubMenu(obj) {
		currentSort =document.getElementById(obj); 
		if(currentSort.parentNode.style.display=="none"){
		currentSort.parentNode.style.display = "";
		sendRequest("menujsp.jsp?sort=" + obj);
		}
		else{
		currentSort.parentNode.style.display = "none";
		}
	}

</script> 
<table style="BORDER-COLLAPSE: collapse" borderColor=#111111 
cellSpacing=0 cellPadding=0 width=200 bgColor=#f5efe7 border=0>

<TR>
  <TD align=middle bgColor=#dbc2b0 height=19><B>作者清单</B> </TD>
</TR>
<tr>
  <td height="20"> <a href="javascript:showSubMenu('IBM')">刘海松</a> </td>
</tr>
<tr style="display:none">
   <td height="20" id="IBM"> </td>
</tr>
<tr>
  <td height="20"> <a href="javascript:showSubMenu('SONY')">刘红霞</a> </td>
</tr>
<tr style="display:none ">
  <td id="SONY" height="20"> </td>
</tr>
</table>


将上述代码保存,名称为menu.jsp。在该文件中,用createXMLHttpRequest()函数创建了XMLHttpRequest实例化对象,sendRequest(url)函数向服务器端发送一个异步请求,参数url表示服务器端的文件路径,名称和函数。ProcessResponse()函数用于处理服务器端的响应,该函数主要依据客户端返回的XML文件,解析XML文件数据,并显示在当前页面。ShowSubMenu(obj)函数是一个创建级联菜单函数,实际上该函数调用了sendRequest()函数向服务器发送异步信息。
      该实例中的服务器端数据不但可以使用变量赋值获取,也可以从数据库中提取数据来显示。如果读者有兴趣的话,可以使用数据库表中的数据响应客户端的请求。

分享到:
评论

相关推荐

    ajax实现级联菜单的类子

    用Ajax实现的一个级联菜单,下拉菜单是从数据库中取数据的。

    Web树形级联菜单,连接oracle,嵌套ajax

    Web树形级联菜单,连接oracle,嵌套ajax,servlet

    Ajax实现java web 中下拉列表二级联动

    ajax 我们也就讲过一个小例子,这是后来经老师指点后用老师的例子改的,希望对想实现二级联动的同学有所帮助.

    Ajax应用实例-在线用户计数实例、在线表格编辑实例、 无刷新形式的查询功能实例、实时校验实例、Web级联菜单实例

    Ajax应用几个实例-在线用户计数实例、在线表格编辑实例、 无刷新形式的查询功能实例、实时校验实例、Web级联菜单实例

    AJAX实现web页面中级联菜单的设计

    看了大峡搞的级联菜单,我也班门弄斧一把,嘿嘿,花了一点时间搞了个级联菜单贴上来看看。本例中只要你选择成员分类名称就会自动显示成员名称: 首先在eclipse中建一个项目,名称你自己做主了,这里为Easyjf-menu,...

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

    ajax实现二级级联(采用了递规调用) 可以直接运行.有案例和详细的说明. 用户注册的使用比较实用

    AJAX_Servlet级联下拉列表

    AJAX_Servlet级联下拉列表 product.jsp UserServlet.java

    北京中科信软AJAX培训

    实战技巧:级联菜单 实战技巧:条目内容 实战技巧:级联下拉列表 使用responseXML处理返回的XML信息 实战技巧:获取元对象数据 实战技巧:处理列表数据 实战技巧:处理级联的数据 实战技巧:保存更新数据 在普通文本...

    美化版的jQuery全国城市级联菜单代码包

    摘要:脚本资源,jQuery,级联菜单,全国城市菜单 美化版的jQuery全国城市级联菜单代码实例包,Select下拉框已经过美化,比传统的灰色风格Select下拉列表更美观,城市菜单信息存放在XML文件内,若城市信息有所变动,...

    asp.net+ajax

    1.本书所附代码的运行环境 .Net框架2.0以上版本 数据库采用MS SQL Server2005和Access2003 ...第14章 无限级级联菜单。 第15章 内文广告系统。 第16章 聊天室开发。 第17章 可个性化定制的RSS系统。 第18章 Web QQ。

    Ajax完全自学手册(源代码).rar

    LinkageList 级联菜单(使用VS 2003) 第18章(\C09) Test4Google Ajax进度条 第19章(\C10) ChatSystem Ajax 聊天室 第20章(\C11) WebQQ WebQQ示例 第21章(\C11) Thirf 电视节目预告 Thirf ...

    《JSP+Dreamweaver CS4+CSS+Ajax动态网站开发典型案例》源代码

    《JSP+Dreamweaver CS4+CSS+Ajax动态网站开发...7.5 级联菜单 7.6 动态表单 7.7 树状菜单 7.8 应用Ajax框架 第8章 在线统计 第9章 注册与登录模块 第10章 学生信息管理系统 第11章 仓库管理系统 第12章 物流管理系统

    AJAX基础概念、核心技术与典型案例(内涵动态实例)

    程序描述:本章将利用开源框架Prototype,讲述如何在网页中实现Windows关机效果,使读者对Prototype框架有进一步的认识。 /lightbox.html 仿Window关机效果 /lightbox.js JavaScript脚本文件 第23章...

    asp.net知识库

    如何在Asp.Net1.1中实现页面模板(所谓的MasterPage技术) Tool Tip 示例(FILTER版) Tool Tip示例 (htc版) 一个.net发送HTTP数据实体的类 按键跳转以及按Enter以不同参数提交,及其他感应事件 动态控制Page页的...

    Ajax完全自学手册PPT和源代码(ptt格式)

    LinkageList 级联菜单(使用VS 2003) 第18章(\C09) Test4Google Ajax进度条 第19章(\C10) ChatSystem Ajax 聊天室 第20章(\C11) WebQQ WebQQ示例 第21章(\C11) Thirf 电视节目预告 Thirf 翻译模块 第...

    超实用的jQuery代码段

    10.24 在列表框中实现加载更多效果 10.25 自定义选择菜单 10.26 使用多个选择菜单进行组合选择 10.27 使用多选菜单选择多个值 10.28 创建双重范围的滑块 10.29 实现开关效果的选择功能 10.30 创建主题化的表单效果 ...

    纯JSP+DWR实现三级联动下拉选择菜单实现技巧

    这个Ajax联动殊不知和这些框架有什么关系,一个小Demo干嘛整得那么大。 今天我做了一个dwr+jsp做的例子。 web.xml: 代码如下: &lt;?xml version=”1.0″ encoding=”UTF-8″?&gt; &lt;web-app version=”2.4″ xmlns...

    python入门到高级全栈工程师培训 第3期 附课件代码

    10 在python2中的继承顺序是什么 11 在子类中调用父类方法 12 super调用父类的方法 13 选择系统作业讲解 第26章 01 学生自主复习 02 分享列表 03 多态 04 封装 05 面向对象概念总结 06 反射 07 反射及动态导入模块...

Global site tag (gtag.js) - Google Analytics