`
chinrui
  • 浏览: 96776 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

AJAX入门

阅读更多
使用XMLHttpRequest对象进行异步的操作

效果:输入时,进行同步的用户名检验
第一步:静态的html页面,作为进行检验的对象,当光标离开输入框的时候,触发validate()方法,查找数据库进行检验
<td>用户名:</td>
	<td>
		<input type=text name=username id=userid onblur="validate()" />
		<div id=usermsg ></div>
	</td>

第二步:编写validate()方法
<script type="text/javascript" >
	var req;
	function validate() {
        //拿到输入用户名的节点
		var username = document.getElementById("userid");
       //写明请求的url地址,使用encodeURI/escape/encodeURIComponent方法对特殊字符进行编码
		var url = "validate.jsp?id=" + encodeURI(username.value);
        //根据不同的操作系统创建不同的XMLHttpRequest对象
		if(window.XMLHttpRequest) {
			req = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}
        //使用open方法进行请求,第三个参数如果是true表示异步,false表示同步
		req.open("get", url , true);
        //onreadystatechange属性相当于监听器,此处相当于函数指针,触发时调用callback()方法
		req.onreadystatechange = callback;
		req.send(null);
	}
	
	function callback() {
//请求分为四个状态,1:已经连接上,2:连接上并成功发送请求,3:进行请求处理的过程中,4:请求处理完成
		if(req.readyState == 4) {
        //确定请求的状态为已经完成
			if(req.status == 200) {
             //确定请求的结果是正确的,而不是tomcat自己生成的结果
                 //对响应的数据进行处理,此处响应的是XML页面
				var node = req.responseXML.getElementsByTagName("msg")[0];
				var msg = node.childNodes[0].nodeValue;
				setMsg(msg);
			}
		}
	}
	//此方法根据响应的数据,进行相应的界面显示
	function setMsg(msg) {
		var node = document.getElementById("usermsg");		
		if(msg == "valid") {
			node.innerHTML = "<font color='green' >可以注册</font>";
		} else {
			node.innerHTML = "<font color='red' >用户名已经被注册过</font>";
		}
	}
</script>

使用AJAX产生二级菜单的联动
准备产生联动效果的静态页面的代码:
<form name="form2" method="post" >
	<select name="category1" onchange="changeCategory()" >
		<option selected >--选择一级目录--</option>
		<option value=93 >电脑/软件/网络/办公</option>
		<option value=95 >珠宝手饰/银饰礼品</option>
		<option value=96 >运动户外/休闲</option>
	</select>
	<select name="category2" >
		<option selected >--选择二级目录--</option>
	</select>
</form>

第一种方法:不使用AJAX产生二级联动的效果,直接从数据库中读出所有的数据:
第一:在客户端动态的生成javascript代码
<%!
private String getSecondCategoriesStr(List<Category> categories , Category category) {
	StringBuilder str = new StringBuilder();
	str.append("if(document.form2.category1.value == " + category.getId() + ") {\n");
	str.append("subNode.options.length = 1;\n");
	for(int i = 0; i < categories.size(); i++) {
		Category c = categories.get(i);
		if(c.getPid() == category.getId()) {
			str.append("var selOption" + i + " = document.createElement('option');\n");
			str.append("selOption" + i + ".innerText = '" + c.getName() + "';\n");
			str.append("selOption" + i + ".value = " + c.getId() + ";\n");
			str.append("subNode.appendChild(selOption" + i + ");\n\n");
		}
	}
	str.append("}\n");
	return str.toString();
}
%>

第二步:编写javascript代码做动态展示
<script type="text/javascript">
	<!--
	function changeCategory() {
		var subNode = document.form2.category2;
		<%=str %>
	}
	-->
</script>

第二种方法:使用AJAX产生返回作息为非xml的二级联动
<script type="text/javascript">
	<!—
     //向处理的文件发送请求,进行异步处理
	var req;
	function changeCategory() {		
		var id = document.form2.category11;
		url = "getchildcategory.jsp?id=" + escape(id.value);
		if(window.XMLHttpRequest) {
			req = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			req = new ActiveXObject("microsoft.XMLHTTP");
		}
		req.open("get", url, true);
		req.onreadystatechange = callback;
		req.send(null);
	}
	//监听处理状态,调用处理反馈的函数
	function callback() {
		if(req.readyState == 4) {
			if(req.status == 200) {
				parse(req.responseText);
			}
		}
	}
	//编写处理返回信息的函数,对返回的信息进行解析
	function parse(msg) {
		var subNode = document.form2.category22;
         //使用正则表达式,去除首尾的空格
		msg = msg.replace(/(^\s+)|(\s+$)/g,"");
         //对返回信息为空串的信息进行特殊处理
		if(msg == null || new String(msg) == "") {
			subNode.options.length = 1;
		} else {
			var categories = msg.split(",");
			subNode.options.length = 1;
			for(var i = 0; i < categories.length; i ++) {
				var categoryProperty = categories[i].split("_");
				var id = categoryProperty[0];
				var name = categoryProperty[1];
				var selOption = document.createElement("option");
				selOption.innerText = name;
				selOption.value = id;
				subNode.appendChild(selOption);
			}
		}
	}
	-->
</script>

编写处理请求的函数,处理请求并返回处理结果
<%@ page import="yuan.rui.love.*" %>
<%@ page import="java.util.*" %>
<%
String strId = request.getParameter("id");
int id = -1;
if(strId != null && !strId.equals("")) {
	id = Integer.parseInt(strId);
}
List<Category> categories = new ArrayList<Category>();
categories = Category.getChilds(id);
StringBuilder strBuild = new StringBuilder();
for(int i = 0; i < categories.size(); i++) {
	Category c = categories.get(i);
	if(i != categories.size() - 1) {
		strBuild.append(c.getId() + "_" + c.getName() + ",");
	} else {
		strBuild.append(c.getId() + "_" + c.getName());
	}
}
response.setContentType("text/xml;charset=gbk");
response.setHeader("Cache-Control", "no-store");  //HTTP 1.1
response.setHeader("Pragma", "no-cache");  //HTTP 1.0
response.setDateHeader("Expires", 0);  //prevents caching at the proxy server
response.getWriter().write(strBuild.toString());
%>

第三种方法:在服务器端生成javascript代码,在用户端直接执行
<script type="text/javascript">
	<!--
	var req;
	function changeCategory() {		
		var id = document.form2.category11;
		url = "getchildcategory_1.jsp?id=" + escape(id.value);
		if(window.XMLHttpRequest) {
			req = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			req = new ActiveXObject("microsoft.XMLHTTP");
		}
		req.open("get", url, true);
		req.onreadystatechange = callback;
		req.send(null);
	}
	
	function callback() {
		if(req.readyState == 4) {
			if(req.status == 200) {
				var subNode = document.form2.category22;
				eval(req.responseText);
			}
		}
	}
	-->
</script>

处理请求的程序,服务器端动态地生成javascript代码
<%@ page import="yuan.rui.love.*" %>
<%@ page import="java.util.*" %>

<%
String strId = request.getParameter("id");
int id = -1;
if(strId != null && !strId.equals("")) {
	id = Integer.parseInt(strId);
}
List<Category> categories = new ArrayList<Category>();
categories = Category.getChilds(id);
StringBuilder strBuild = new StringBuilder();
strBuild.append("subNode.options.length = 1;\n");
for(int i = 0; i < categories.size(); i++) {
	Category c = categories.get(i);
	strBuild.append("var selOption" + i + " = document.createElement('option');\n");
	strBuild.append("selOption" + i + ".innerText = '" + c.getName() + "';\n");
	strBuild.append("selOption" + i + ".value = " + c.getId() + ";\n");
	strBuild.append("subNode.appendChild(selOption" + i + ");\n");
}
response.setContentType("text/html;charset=gbk");
response.setHeader("Cache-Control", "no-store");  //HTTP 1.1
response.setHeader("Pragma", "no-cache");  //HTTP 1.0
response.setDateHeader("Expires", 0);  //prevents caching at the proxy server
response.getWriter().write(strBuild.toString());
%>

第四种方法:使用AJAX产生返回信息为xml的二级联动
<script type="text/javascript">
	<!--
	var req;
	function changeCategory() {		
		var id = document.form2.category11;
		url = "getchildcategory_2.jsp?id=" + escape(id.value);
		if(window.XMLHttpRequest) {
			req = new XMLHttpRequest();
		} else if(window.ActiveXObject) {
			req = new ActiveXObject("microsoft.XMLHTTP");
		}
		req.open("get", url, true);
		req.onreadystatechange = callback;
		req.send(null);
	}
	
	function callback() {
		if(req.readyState == 4) {
			if(req.status == 200) {
				parseXML(req.responseXML);
			}
		}
	}
	
	function parseXML(xml) {
		var categories = xml.getElementsByTagName("categories")[0];
		var subNode = document.form2.category22;
		subNode.options.length = 1;
		for(var i = 0; i < categories.childNodes.length; i++) {
			var category = categories.childNodes[i];
			var id = category.childNodes[0].childNodes[0].nodeValue;
			var name = category.childNodes[1].childNodes[0].nodeValue;
			var selOption = document.createElement("option");
			selOption.innerText = name;
			selOption.value = id;
			subNode.appendChild(selOption);
		}
	}
	-->
</script>

处理请求并返回格式为xml处理信息的页面:
<%@ page import="yuan.rui.love.*" %>
<%@ page import="java.util.*" %>

<%
String strId = request.getParameter("id");
int id = -1;
if(strId != null && !strId.equals("")) {
	id = Integer.parseInt(strId);
}
List<Category> categories = new ArrayList<Category>();
categories = Category.getChilds(id);
StringBuilder strBuild = new StringBuilder();
for(int i = 0; i < categories.size(); i++) {
	Category c = categories.get(i);
	strBuild.append("<category><id>" + c.getId() + "</id><name>" + c.getName() + "</name></category>");
}
//xml文件中必需有要节点,最好也写上头文件
strBuild.insert(0,"<?xml version='1.0' encoding='gb2312'?><categories>");
strBuild.append("</categories>");

response.setContentType("text/xml;charset=gbk");
response.setHeader("Cache-Control", "no-store");  //HTTP 1.1
response.setHeader("Pragma", "no-cache");  //HTTP 1.0
response.setDateHeader("Expires", 0);  //prevents caching at the proxy server
response.getWriter().write(strBuild.toString());
%>


分享到:
评论

相关推荐

    Ajax入门例子项目

    在这个"Ajax入门例子项目"中,我们将深入探讨Ajax的基础概念、工作原理以及如何创建简单的Ajax应用。 1. Ajax基础概念: - 异步:Ajax的主要特性是异步通信,意味着用户在请求发送后可以继续浏览网页,而无需等待...

    《ajax入门经典》源代码

    **Ajax入门经典源代码概述** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术的核心在于利用JavaScript与服务器进行异步数据交互,结合XML或其他...

    ASP.NET 2.0 AJAX入门经典实例,有很好的参考价值,XML-Script

    《ASP.NET 2.0 AJAX入门经典》这本书很可能包含了多个示例,演示如何使用AJAX技术来增强ASP.NET 2.0应用程序的交互性。这些实例可能涵盖用户界面改进、数据异步加载、实时验证等多个场景,帮助读者掌握实际开发技巧...

    ASP.NET_AJAX入门系列

    ASP.NET_AJAX入门系列:概述.doc ASP.NET_AJAX_在Web开发中的应用.doc ASP.NET_AJAX入门系列:Timer控件简单使用.doc ASP.NET_AJAX入门系列:UpdateProgress控件简单介绍.doc ASP.NET_AJAX入门系列:使用...

    Ajax入门,java Ajax入门

    **Ajax入门:无刷新技术与JavaScript中的Ajax** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器交换数据并局部更新页面,使得用户...

    ASP.NET AJAX入门系列教程

     ASP.NET AJAX是一个完整的开发框架,其服务器端编程模型相对于客户端编程模型较为简单,而且容易与现有的ASP.NET程序相结合,通常实现复杂的功能只需要在页面中拖几个控件,而不必了解深层次的工作原理,除此之外...

    Ajax入门教程(通过例子讲解)

    Ajax,即Asynchronous JavaScript and XML(异步JavaScript和XML),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。Ajax允许网页与服务器之间进行交互,实现数据的动态加载,提高了用户体验。 在...

    ajax入门教程PDF

    **Ajax(Asynchronous JavaScript and XML)**是一种在无需重新加载整个...通过阅读这份"ajax入门教程PDF",初学者将能够快速理解Ajax的工作方式,掌握基本的Ajax编程技能,从而在实际项目中提升网页的交互性和动态性。

    AJAX入门实例-简单易懂

    总的来说,这个"AJAX入门实例"旨在帮助初学者理解AJAX的基本概念和工作流程,以及如何在ASP.NET环境中实现它。通过学习这个实例,你可以掌握创建异步Web应用的基本技巧,提高用户体验,并为后续更复杂的AJAX应用场景...

    ajax chm ajax入门 ajax教程

    **Ajax入门**通常涉及以下几个关键概念: 1. **XMLHttpRequest对象**:它是Ajax的核心,用于在后台与服务器进行通信。创建XMLHttpRequest对象后,可以通过它的open()方法设置请求类型(GET或POST)、URL以及是否异步...

    Ajax 入门经典 (Ajax 核心 技术)

    **Ajax 入门经典——掌握Ajax核心技术** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新,极大地...

    Ajax程序经典小例子,《Ajax入门教程》代码

    在《Ajax入门教程》中,可能包含了一系列经典的小例子,比如: 1. **实时搜索建议**:用户在输入框中输入字符时,利用Ajax动态向服务器发送请求,获取匹配的搜索建议,并即时显示在下拉框中。 2. **无刷新分页**:...

    ajax读取页面内容【简单的ajax入门实例】

    通过这个简单的Ajax入门实例,你可以理解如何利用Ajax实现页面内容的异步加载。随着经验的增长,还可以学习更高级的技巧,如使用jQuery的$.ajax()函数、Promise或现代的fetch API,以及错误处理和进度回调等。

    Ajax入门视频教程

    **Ajax入门视频教程** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它的核心在于JavaScript,通过XMLHttpRequest对象与服务器进行异步数据交互,从而实现...

    前端技术ajax入门

    ### 前端技术AJAX入门精讲 #### 一、AJAX概述 **AJAX**(Asynchronous JavaScript and XML,异步JavaScript和XML)是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX可以使网页实现...

    ajax入门视频教程

    **Ajax入门视频教程详解** Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。这种技术使得Web应用程序能够更快、更高效地运行,提升了用户体验,因为它允许...

Global site tag (gtag.js) - Google Analytics