Ajax开发技术

XMLHttpRequest对象:

在Ajax中主要是通过XMLHttpRequest对象处理发送异步请求和回应的,

如果要创建一个XMLHttpRequest对象则必须使用JavaScript,创建语句如下:

创建XMLHttpRequest对象----create_ajax.htm

<html>
<head>
	<title></title>
	<script language="javascript">
		var xmlHttp ;//Ajax核心对象名称
		function createXMLHttp(){//创建XMLHttpRequest核心对象
			if(window.XMLHttpRequest){//判断当前使用的浏览器类型
				xmlHttp = new XMLHttpRequest() ;//表示使用的是FireFox内核的浏览器
			} else {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;//表示使用的是IE内核的浏览器
			}
		}
	</script>
</head>
<body>
</body>
</html>
XMLHttpRequest对象的属性:

NO.属性描述
1onreadystatechange指定当readState状态改变时使用的操作,一般用于指定具体的回调函数
2readyState返回当前请求的状态,只读
3responseBody将回应信息正文以unsigned byte数组形式返回,只读
4responseStream以Ado Stream对象的形式返回响应信息,只读
5responseText接收以普通文本返回的数据,只读
6responseXML 接收以XML文档形式回应的数据,只读
7status返回当前请求的http状态码,只读
8statusText返回当前请求的响应行状态,只读

readyState一共有5种取值,分别介绍如下:

0:请求没有发出(在调用open()函数之前)、

1:请求已经建立但还没有发出(在调用send()函数之前)

2:请求已经发出正在处理之中(这里通常可以冲响应得到内容头部)

3:请求已经处理,正在接受服务器的信息,响应中通常有部分数据可用,但是服务器还没有完成响应

4:响应已完成,可以访问服务器响应并使用它


XMLHttpRequest对象的方法:

NO.方法描述
1abort()取消当前所发出的请求
2getAllResponseHeaders()取得所有的HTTP头信息
3getResponseHeader()取得一个指定的HTTP头信息
4open()创建一个HTTP请求,并指定请求模式,如GET请求或POST请求
5send()将创建的请求发送到服务器端,并接收回应信息
6setRequestHeader()设置一个指定请求的HTTP头信息

第一个Ajax程序
返回数据的页面----content.htm
Hello World!!!
使用异步处理----ajax_receive_content.htm

<span style="font-size:12px;"><html>
<head>
	<title></title>
	<script language="javascript">
		var xmlHttp ;
		function createXMLHttp(){
			if(window.XMLHttpRequest){
				xmlHttp = new XMLHttpRequest() ;
			} else {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;
			}
		}
		function showMsg(){
			createXMLHttp() ;	// 创建XMLHttp对象
			xmlHttp.open("POST","content.htm") ;
			// 设置操作的回调函数
			xmlHttp.onreadystatechange = showMsgCallback ;
			xmlHttp.send(null) ;
		}
		function showMsgCallback(){	// 回调操作函数
			if(xmlHttp.readyState == 4){	// 调用完成
				if(xmlHttp.status == 200){	// HTTP状态码操作正常
					var text = xmlHttp.responseText ;
					document.getElementById("msg").innerHTML = text ;
				}
			}
		}
	</script>
</head>
<body>
<input type="button" onClick="showMsg()" value="调用AJAX显示内容">
<span id="msg"></span>
</body>
</html></span>

异步验证

编写注册表单页----regist.htm

<html>
<head>
	<title></title>
	<script language="javascript">
		var xmlHttp ;
		var flag = false ;
		function createXMLHttp(){
			if(window.XMLHttpRequest){
				xmlHttp = new XMLHttpRequest() ;
			} else {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;
			}
		}
		function checkUserid(userid){
			createXMLHttp() ;
			xmlHttp.open("POST","CheckServlet?userid="+userid) ;//设置一个请求,通过地址重写的方式将userid传递到JSP中
			xmlHttp.onreadystatechange = checkUseridCallback ;//设置请求完成后处理的回调函数
			xmlHttp.send(null) ;//发送请求,不传递任何参数
			document.getElementById("msg").innerHTML = "正在验证..." ;
		}
		function checkUseridCallback(){//定义回调函数
			if(xmlHttp.readyState == 4){//数据返回完毕
				if(xmlHttp.status == 200){//HTTP操作正常
					
					var text = xmlHttp.responseText ;//接收返回的内容
					if(text == "true"){	// 用户id已经存在了
						document.getElementById("msg").innerHTML = "用户ID重复,无法使用!" ;
						flag = false ;
					} else {
						document.getElementById("msg").innerHTML = "此用户ID可以注册!" ;
						flag = true ;
					}
				}
			}
		}
		function checkForm(){
			return flag ;
		}
	</script>
</head>
<body>
<form action="regist.jsp" method="post" οnsubmit="return checkForm()">
	用户ID:<input type="text" name="userid" οnblur="checkUserid(this.value)"><span id="msg"></span><br>
	姓  名:<input type="text" name="name"><br>
	密  码:<input type="password" name="password"><br>
	<input type="submit" value="注册">
	<input type="reset" value="重置">
</form>
</body>
</html>
验证用户名是否存在----CheckServlet.java
package org.lxh.ajaxdemo ;
import java.sql.* ;
import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
public class CheckServlet extends HttpServlet{
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
 	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	public static final String DBUSER = "root" ;
	public static final String DBPASS = "mysqladmin" ;
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
		this.doPost(request,response) ;
	}
	public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
		request.setCharacterEncoding("GBK") ;
		response.setContentType("text/html") ;//设置回应的MIME
		Connection conn = null ;//声明数据库连接对象
		PreparedStatement pstmt = null ;//声明数据库操作
		ResultSet rs = null ;//声明数据库结果集
		PrintWriter out = response.getWriter() ;
		String userid = request.getParameter("userid") ;//接收验证userid
		try{
			Class.forName(DBDRIVER) ;
			conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
			String sql = "SELECT COUNT(userid) FROM user WHERE userid=?" ;
			pstmt = conn.prepareStatement(sql) ;
			pstmt.setString(1,userid) ;
			rs = pstmt.executeQuery() ;
			if(rs.next()){
				if(rs.getInt(1)>0){	// 用户ID已经存在了
					out.print("true") ;
				} else {
					out.print("false") ;
				}
			}
		}catch(Exception e){
			e.printStackTrace() ;
		}finally{
			try{
				conn.close() ;
			}catch(Exception e){}
		}
	}
}
配置web.xml

	<servlet>
		<servlet-name>CheckServlet</servlet-name>
		<servlet-class>org.lxh.ajaxdemo.CheckServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>CheckServlet</servlet-name>
		<url-pattern>/ajaxdemo_02/CheckServlet</url-pattern>
	</servlet-mapping>
返回XML数据

要返回XML文件----allarea.xml

<?xml version="1.0" encoding="GBK"?>
<allarea>
	<area>
		<id>1</id>
		<title>北京</title>
	</area>
	<area>
		<id>2</id>
		<title>天津</title>
	</area>
	<area>
		<id>3</id>
		<title>南京</title>
	</area>
</allarea>
使用Ajax解析XML,并生成下拉列表框----ajax_select.htm

<html>
<head>
	<title></title>
	<script language="javascript">
		var xmlHttp ;
		function createXMLHttp(){
			if(window.XMLHttpRequest){
				xmlHttp = new XMLHttpRequest() ;
			} else {
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP") ;
			}
		}
		function getCity(){
			createXMLHttp() ;
			xmlHttp.open("POST","allarea.xml") ;
			xmlHttp.onreadystatechange = getCityCallback ;
			xmlHttp.send(null) ;
		}
		function getCityCallback(){
			if(xmlHttp.readyState == 4){
				if(xmlHttp.status == 200){
					var allarea = xmlHttp.responseXML.getElementsByTagName("allarea")[0].childNodes ;	// 取得全部的allarea下的节点
					var select = document.getElementById("city") ;
					select.length = 1 ;	// 每次选择一个
					select.options[0].selected = true ;	// 第一个为选中的状态
					for(var i=0;i<allarea.length;i++){
						var area = allarea[i] ;
						var option = document.createElement("option") ;
						var id = area.getElementsByTagName("id")[0].firstChild.nodeValue ;
						var title = area.getElementsByTagName("title")[0].firstChild.nodeValue;
						option.setAttribute("value",id) ;
						option.appendChild(document.createTextNode(title)) ;
						select.appendChild(option) ;
					}
				}
			}
		}
	</script>
</head>
<body οnlοad="getCity()">
	<form action="" method="post">
		请选择喜欢的城市:
			<select name="city">
				<option value="0"> - 请选择城市 -</option>
			</select>
	</form>
</body>
</html>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值