解析Ajax实例教程-----级联菜单_AJAX教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:如何不用组件实现Ajax效果
现在.NET的Ajax组件确实不少了,微软的ajax extensions用起来很方便,一个UpdatePanel就可以搞定一切。不过,可能有些朋友更愿意自己来写。那么在.NET里,你是否知道ICallbackEventHandler呢? 大家应该都知道ASP.NET页面调用时的几种方式:Postback/Cross-p

关于ajax的特性,这里不再写了,去网上随便就能找到好多. 现在写一个用ajax和jsp来实现的动态菜单的实例.先感觉一下ajax是如何实现传说中的异步操作!
menu.html
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<LINK href="images/css.css" type=text/css rel=stylesheet>
<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].lastChild.data;
}
currentSort.innerHTML = subMenu;
}
// 创建级联菜单函数
function showSubMenu(obj) {
currentSort = document.getElementById(obj);
currentSort.parentNode.style.display = "";
sendRequest("menu.jsp?sort=" + obj);
}

</script>

</head>
<body>
<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 onClick="showSubMenu('A')">一级指标A</a> </td>
</tr>
<tr style="display:none">
<td height="20" id="A"> </td>
</tr>
<tr>
<td height="20"> <a onClick="showSubMenu('B')">一级指标B</a> </td>
</tr>
<tr style="display:none ">
<td height="20" id="B"> </td>
</tr>
</table>
</body>
</html>

menu.jsp

<%@ page contentType="text/html; charset=GBK" %>
<%
//接收浏览器端提交的信息
String sort=request.getParameter("sort");
String contents1="";
String contents2="";
if(sort.equals("A")){
contents1="一级指标AA";
contents2="一级指标AB";
}else if(sort.equals("B")){
contents1="二级指标BA";
contents2="二级指标BB";
}
//传回响应数据
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();
%>
OK , 代码就这么多,十分简单.
下面简单介绍一下上面的ajax操作:

<!--[if !supportLists]-->1. <!--[endif]--> ajax技术主要由四部分组成

javascript

css

dom

XMLHttpRequest

<!--[if !supportLists]-->2. <!--[endif]--> ajax的核心对象

XMLHttpRequest

<!--[if !supportLists]-->3. <!--[endif]--> XMLHttpRequest对象的方法

void open(String method, String url, boolean async)

void send(String body)

void setHeader(String header, String value)

String getResponseHeader(String header)

String getAllResponseHeaders()

void abort()

 

<!--[if !supportLists]-->4. <!--[endif]-->XMLHttpRequest对象的属性

返回值类型
属性名
Number
readyState
Function
Onreadystatechange
String
responseText
XmlDocument
responseXML
Number
status
String
statusText

<!--[if !supportLists]-->5. <!--[endif]-->ajax 操作的主要步骤

⑴ 声明一个XMLHttpRequest对象.

⑵ 调用window.open(method, url , boolean),执行后台操作

⑶ 对返回值进行操作, 一般用XMLHttpRequest对象的onreadystatechange属性.

⑷ 执行send(body)方法.

分享:ajax跨域访问代理文件下载(asp、php、asp.net)
最近做东西遇到了ajax跨域(cross domain)访问的问题,最后采用了Application Proxies 方式解决,即在本域内放置一个代理文件(视本域支持的开发语言选定asp、asp.net或是其他),此代理文件将url参数(QueryString)发送到目标域对应页面获取html代码,然

来源:模板无忧//所属分类:AJAX教程/更新时间:2010-02-25
相关AJAX教程