ajax基础

•Ajax的技术的产生
–Ajax被认为是(AsynchronousJavaScript and XML的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.
–“Ajax”这个名字是在2005年2月,AdaptivePath的JesseJames Garrett在他的文章Ajax:ANew Approach to Web Application中创造。
–而Ajax这项技术,是Google在GoogleLabs发布GoogleMaps和GoogleSuggest后真正为人所认识。

•Ajax:一种不用刷新整个页面便可与服务器通讯的办法

在Ajax模型中,数据在客户端与服务器之间独立传输。服务器不再返回整个页面


•不用刷新整个页面便可与服务器通讯的办法:
–Flash
–Javaapplet
–框架:如果使用一组框架构造了一个网页,可以只更新其中一个框架,而不必惊动整个页面
–隐藏的iframe
XMLHttpRequest:该对象是对 JavaScript的一个扩展,可使网页与服务器进行通信。是创建 Ajax 应用的最佳选择。实际上通常把Ajax 当成 XMLHttpRequest对象的代名词

•Ajax并不是一项新技术,它实际上是几种技术,每种技术各尽其职,以一种全新的方式聚合在一起
服务器端语言:服务器需要具备向浏览器发送特定信息的能力。Ajax与服务器端语言无关
XML (eXtensibleMarkup Language,可扩展标记语言) 是一种描述数据的格式。Aajx程序需要某种格式化的格式来在服务器和客户端之间传递信息,XML是其中的一种选择
XHTML(eXtendedHypertext Markup Language,使用扩展超媒体标记语言)和CSS(CascadingStyle Sheet,级联样式单)标准化呈现;
DOM(DocumentObject Model,文档对象模型)实现动态显示和交互;
–使用XMLHTTP组件XMLHttpRequest对象进行异步数据读取
–使用JavaScript绑定和处理所有数据

•AJAX不是完美的技术。使用AJAX,它的一些缺陷不得不权衡一下:
–由 Javascript和 AJAX引擎导致的浏览器的兼容
–页面局部刷新,导致后退等功能失效
–对流媒体的支持没有FLASH、JavaApplet好。
–一些手持设备(如手机、PDA等)支持性差。


•XMLHttpRequest 最早是在IE5中以ActiveX组件的形式实现的。非W3C 标准.
•创建XMLHttpRequest对象(由于非标准所以实现方法不统一
–InternetExplorer把XMLHttpRequest实现为一个ActiveX对象
–其他浏览器(Firefox、Safari、Opera…)把它实现为一个本地的JavaScript对象。
XMLHttpRequest在不同浏览器上的实现是兼容的,所以可以用同样的方式访问XMLHttpRequest实例的属性和方法,而不论这个实例创建的方法是什么。






•利用XMLHttpRequest实例与服务器进行通信包含以下3个关键部分:
–onreadystatechange事件处理函数
–open 方法
–send 方法 

•onreadystatechange:
–该事件处理函数由服务器触发,而不是用户
–在 Ajax执行过程中,服务器会通知客户端当前的通信状态。这依靠更新 XMLHttpRequest 对象的readyState来实现。改变readyState属性是服务器对客户端连接操作的一种方式。每次readyState属性的改变都会触发readystatechange事件

•open(method, url,asynch)
–XMLHttpRequest 对象的open方法允许程序员用一个Ajax调用向服务器发送请求
–method:请求类型,类似“GET”或”POST”的字符串。若只想从服务器检索一个文件,而不需要发送任何数据,使用GET(可以在GET请求里通过附加在URL上的查询字符串来发送数据,不过数据大小限制为2000个字符)。若需要向服务器发送数据,用POST。
–在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个URL。如果对每个请求的响应不同,就会带来不好的结果。在此将时间戳追加到URL的最后,就能确保URL的唯一性,从而避免浏览器缓存结果
–url:路径字符串,指向你所请求的服务器上的那个文件。可以是绝对路径或相对路径。
–asynch:表示请求是否要异步传输,默认值为true。指定true,在读取后面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点时,会停下来,一直等到Ajax请求执行完毕再继续执行。

•send(data):
–open 方法定义了 Ajax请求的一些细节。send方法可为已经待命的请求发送指令
–data:将要传递给服务器的字符串。
若选用的是 GET请求,则不会发送任何数据, 给 send方法传递 null 即可:request.send(null);
–当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null.


•setRequestHeader(header,value)
–当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是GET 还是 POST
–Ajax 请求中,发送首部信息的工作可以由 setRequestHeader该完成
–参数header: 首部的名字;  参数value:首部的值。
如果用 POST请求向服务器发送数据,需要将 “Content-type”的首部设置为 “application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合URL编码了。
该方法必须在open()之后才能调用
–完整的 Ajax的 POST请求示例:


•用 XMLHttpRequest 的方法可向服务器发送请求。在Ajax 处理过程中,XMLHttpRequest 的如下属性可被服务器更改:
–readyState
–status
–responseText
–responseXML


•readyState
–readyState属性表示Ajax请求的当前状态。它的值用数字代表。
•0 代表未初始化。还没有调用 open 方法
•1 代表正在加载。open 方法已被调用,但send 方法还没有被调用
•2 代表已加载完毕。send 已被调用。请求已经开始
•3 代表交互中。服务器正在发送响应
4 代表完成。响应发送完毕
每次 readyState值的改变,都会触发readystatechange事件。如果把onreadystatechange 事件处理函数赋给一个函数,那么每次readyState值的改变都会引发该函数的执行。
–readyState值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把readyState的值统一设为 4


•status
–服务器发送的每一个响应也都带有首部信息。三位数的状态码是服务器发送的响应中最重要的首部信息,并且属于超文本传输协议中的一部分。
–常用状态码及其含义:
•404 没找到页面(notfound)
•403 禁止访问(forbidden)
•500 内部服务器出错(internalservice error)
•200 一切正常(ok)
•304 没有被修改(notmodified)
XMLHttpRequest 对象中,服务器发送的状态码都保存在 status 属性里。通过把这个值和 200 304 比较,可以确保服务器是否已发送了一个成功的响应


•responseText
–XMLHttpRequest 的responseText 属性 包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。
–当 readyState 属性值变成4 时, responseText 属性才可用,表明Ajax 请求已经结束。


•responseXML
–如果服务器返回的是 XML, 那么数据将储存在 responseXML 属性中。
–只用服务器发送了带有正确首部信息的数据时, responseXML属性才是可用的。 MIME 类型必须为 text/xml



•在服务器端 AJAX是一门与语言无关的技术。在业务逻辑层使用何种服务器端语言都可以。
•从服务器端接收数据的时候,那些数据必须以浏览器能够理解的格式来发送。服务器端的编程语言只能以如下3 种格式返回数据:
–XML
–JSON
–HTML


<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
<script type="text/javascript">
	window.onload = function() {
		//获取a元素节点,并为其添加onclick响应函数
		document.getElementsByTagName("a")[0].onclick = function() {
			//创建一个XMLHttpRequest对象
			var request = new XMLHttpRequest();
			//准备发送请求的数据:method和url
			var url = this.href;
			var method = "GET";
			//调用XMLHttpRequest对象的open方法
			request.open(method, url);
			//调用XMLHttpRequest对象的send方法
			request.send(null);
			//为XMLHttpRequest 对象添加onreadystatechange响应函数
			request.onreadystatechange = function() {
				//判断响应是否完成:XMLHttpRequest对象的readyState属性值为4
				if (request.readyState == 4) {
					//判断响应是否可用:XMLHttpRequest对象的status属性值为200
					if (request.status == 200 || request.status == 304) {
						//打印响应结果:responseText
						alert(request.responseText);
					}
				}
			}
			//取消a节点的默认行为
			return false;
		}
	}
</script>
</head>
<body>
	<a href="helloAjax.txt">hello ajax</a>
</body>
</html>









  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值