加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ajax-Js实现

发布时间:2020-12-16 01:51:25 所属栏目:百科 来源:网络整理
导读:虽然现在较多使用jQuery实现的Ajax,但js实现的ajax我们仍然需要了解; XMLHttpRequest: XMLHttpRequest 最早是在IE5中以ActiveX组件的形式实现的。非 W3C 标准. 利用XMLHttpRequest 实例与服务器进行通信包含以下3个关键部分: onreadystatechange 事件处

虽然现在较多使用jQuery实现的Ajax,但js实现的ajax我们仍然需要了解;

XMLHttpRequest:
XMLHttpRequest 最早是在IE5中以ActiveX组件的形式实现的。非 W3C 标准.
利用XMLHttpRequest 实例与服务器进行通信包含以下3个关键部分:
onreadystatechange 事件处理函数
open 方法open(method,url,asynch)
send 方法 send(data):
onreadystatechange:
该事件处理函数由服务器触发,而不是用户
在 Ajax 执行过程中,服务器会通知客户端当前的通信状态。这依靠更新 XMLHttpRequest 对象的 readyState 来实现。改变 readyState 属性是服务器对客户端连接操作的一种方式。
每次 readyState 属性的改变都会触发 readystatechange 事件
发送请求:
setRequestHeader(header,value)
当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是 GET 还是 POST。
Ajax 请求中,发送首部信息的工作可以由 setRequestHeader该完成
参数header: 首部的名字; 参数value:首部的值。
如果用 POST 请求向服务器发送数据,需要将 “Content-type” 的首部设置为 “application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合URL编码了。
该方法必须在open()之后才能调用
完整的 Ajax 的 POST 请求示例:
接收响应:
readyState
readyState 属性表示Ajax请求的当前状态。它的值用数字代表。
0 代表未初始化。 还没有调用 open 方法
1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用
2 代表已加载完毕。send 已被调用。请求已经开始
3 代表交互中。服务器正在发送响应
4 代表完成。响应发送完毕
每次 readyState 值的改变,都会触发 readystatechange 事件。如果把 onreadystatechange 事件处理函数赋给一个函数,那么每次 readyState 值的改变都会引发该函数的执行。
readyState 值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把 readyState 的值统一设为 4
响应数据格式:xml json html

案例一:使用ajax技术发送get请求,并返回三种不同格式的数据:

<!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">
<title>Insert title here</title>

<script type="text/javascript" src="scripts/jquery-1.7.2.js" ></script>
<script type="text/javascript">

	$(function()
			{
				$("a").click(function()
						{
							var request = new XMLHttpRequest();
							var method = "GET";
							//获取url 分别指向三个不同的数据文件
							var url = this.href;
							request.open(method,url);
							request.send(null);
							
							var $content = $(this).text();
							
							//html数据响应
							if($content=="Andy")
							{
								request.onreadystatechange = function()
								{
									if(request.readyState==4)
									{
										if(request.status==200 || request.status==304)
										{
											$("#details")[0].innerHTML=request.responseText;
										}
									}
								}
								
							}
							
							//xml数据响应
							if($content=="Richard")
							{
								request.onreadystatechange = function()
								{
									if(request.readyState==4)
									{
										if(request.status==200 || request.status==304)
										{
											var result = request.responseXML;
											var name = result.getElementsByTagName("name")[0].firstChild.nodeValue;
											var website = result.getElementsByTagName("website")[0].firstChild.nodeValue;
											var email = result.getElementsByTagName("email")[0].firstChild.nodeValue;
											alert(name);
											alert(website);
											alert(email);
										}
									}
								}
							}
							//json数据响应
							if($content=="Jeremy")
							{
								request.onreadystatechange = function()
								{
									if(request.readyState==4)
									{
										if(request.status==200 || request.status==304)
										{
											var result = request.responseText;
											var object = eval("("+result+")");
											var name = object.person.name;
											var age = object.person.age;
											var email = object.person.email;
											
											alert(name);
											alert(age);
											alert(email);
										}
									}
								}
							}
							
							return false;
						});
			});

</script>

</head>
<body>
	<h1>People</h1>
	<ul>
		<li><a href="files/andy.html">Andy</a></li>
		<li><a href="files/richard.xml">Richard</a></li>
		<li><a href="files/jeremy.json">Jeremy</a></li>
	</ul>	
	<div id="details"></div>
</body>
</html>

三个数据内容如下:

html:<h2><a href="mailto:andy@clearlet.com">Andy Budd</a></h2>
<a href="http://andybudd.com/">http//:cuigaochong.com</a>

xml:<?xml version="1.0" encoding="UTF-8"?>
<details>
<name>Cuigaochong</name>
<website>www.baidu.com</website>
<email>cuigaochong@163.com</email>
</details>

json:{"person":
{
"name":"Cui",
"age":12,
"email":"cuigaochong@163.com"
}

案例二:使用ajax技术发送post请求;
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>Insert title here</title>
<script type="text/javascript" src="scripts/jquery-1.7.2.js" ></script>
<script type="text/javascript">
	$(function()
			{
				
				$("a").click(function()
						{
							//创建xmlHttpRequest
							var request = new XMLHttpRequest();
							
							//准备发送请求的数据  :url    增加时间戳可以起到禁用缓存的目的
							var url = this.href+"?time="+new Date();
							var method = "POST";
							//调用xmlHttpRequest对象的open方法
							request.open(method,url);
							request.setRequestHeader("ContentType","application/x-www-form-urlencoded");
							//调用xmlHttpRequest的send方法
							request.send("name='cuigaochong'&age=1");
							//为XMLHttpRequest对象添加onreadystatechange相应事件
							request.onreadystatechange = function()
							{
								
								if(request.readyState == 4)
								{
									if(request.status==200||request.status==304)
									{
										alert(request.responseText);
									}
								}
							}
							
							return false;
						});
				
		
			});

</script>

</head>
<body>

	<a href="helloAjax.txt">Hello Ajax</a>

</body>
</html>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读