学习AJAX心得体会
Ajax engine
Ajax engine是嵌入到各种浏览器(Internet Explorer 5以后)之中专门处理ajax的机制。遵循的是xmlhttp协议。当客户端发出AJAX请求后首先会请求AJAX engine 并把请求的数据发送给AJAX engine.AJAX engine 收到请求后,会立即请求服务端,采用的任然是HTTP协议。服务端处理请求后把结果(任然返回的是页面)返回给AJAX engine。AJAX engine收到服务端返回的结果并处理返回的结果,把客户端需要的数据返回给客户端。AJAX engine 实际上充当的客户端的代理。当收到服务端返回的结果后会立刻通知客户端。
同步
客户端发出HTTP请求—>服务器接受客户端的请求并处理客户的请求–>服务器响应客户端的请求
缺点:1.每一次客户提交请求的时候,提交的是整个页面。也就是说不管这个页面的数据量大小,都要经过网络的传输。这样给网络造成了数据的压力。2.在每次客户提交请求的时候,因为要提交整个数据,所以就要刷心整个页面。这样情况对于用户的交互性来说是很不好的。因为一提交以后用户当前的页面就成了白班,用户所做的事情只能是等待。3.在每次进行提交请求的时候,用户有可能让服务器处理的数据很少,没有必要把其他数据也传输到服务器上。但是同步是做不到这点的。
异步
客户端不再发送http请求,而是用JavaScript调用一个叫Ajax engine来发送数据,不用再提交整个页面。
优点:1.不用提交整个页面,而是用JavaScript提交具体的数据,这样就使一些没有必要在网络上传输的数据不用传输了。2.由于不用刷新整个页面,所以即便提交以后,展现在客户面前的页面还是不会消失的,这样对于客户的交互性特别好。
什么事ajax
允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.
XmlHttpRequest
该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。XMLHttpRequest是XMLHTTP组件的对象,通过这个对象,不用每次都刷新界面,也不用每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又加快了响应速度、缩短了用户等待的时间。
onreadystatechange方法
该事件处理函数由服务器触发,而不是用户触发。在ajax执行过程中,服务器会通知客户端当前的通信状态。因为在web2.0的应用中,客户端的界面没有刷新,这样你就必须得告诉用户服务器端的各种状态,但是这种情况再web1中不存在,因为在web1中如果能返回页面那就是执行成功了,如果不能返回页面那执行失败。而web2.0的这种情况是靠服务器端更新XMLHttpRequest对象的readyState来实现的。改变readyState的属性时服务器端连接客户端的一种操作方式。每次readyState属性的改变都有触发readystatechange事件。
open(method,url,asynch)方法
method表示请求类型。url指向服务器的那个地址。asynch表示请求是否要异步传输。默认值为true(异步)。
send(data)方法
data:将要传递给服务器的字符串。若选用的是 GET 请求,则不会发送任何数据, 给 send 方法传递 null 即可。当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null.
setRequestHeader(header,value)
如果用post请求向服务器发送数据,需要将”Content-type”的首部设置为”application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合url编码了。
readyState
0表示未初始化,还没有调用open方法。
1表示正在加载,open方法已经被调用,但send方法还没有被调用。
2代表已经加载完毕。Send已被调用。请求已经开始。
3代表交互中。服务器正在发送响应。
4代表完成,响应发送完毕。
status
404没有找到页面(not found)。
403禁止访问(forbidden)。
500内部服务器出错(internal server error)。
200一切正常(OK)。
304没有被修改。
在XMLHttpRequest对象中,服务器发送的状态码都保存在了status属性里。通过这个值和200或者304做比较,可以确保服务器是否发送了一个成功的响应。
responseText
XMLHttpRequest的属性responseText包含了从服务器端发送过来的数据,它是一个HTML,XML或者普通文本。这取决于服务器发送的内容。当readyState属性值为4时,responseText属性才可用。表明ajax请求已经结束。
responseXML
如果服务器返回的是XML,那么数据将储存在responseXML属性中。只有向服务器发送了带有正确的首部信息的数据时,responseXML属性才是有用的。MIME类型必须为text/xml类型。
初始化XMLHttpRequest对象
function createXmlHttpRequest(){
var xmlHttp;
try{
//FireFox,Opera8.0+,Safari
xmlHttp = new XMLHttpRequest();
}catch(e){
try{
//Internet Explorer
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
}