标签:
Ajax技术的核心是XMLHttpRequest对象(简称XHR),可以通过使用XMLHttpRequest对象获取到服务器的数据,然后再通过DOM将数据插入到页面中呈现。也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。
XMLHttpRequest是一个JavaScript对象,通过一个简单的方法检索URL中的数据。
1 xmlhttp = new XMLHttpRequest();
当然对于IE6或者更早的IE版本这样是不行滴,不支持XMLHttpRequest()方法来创建XMLHttpRequest对象,需要ActiveXObject()方法来创建。因此,在IE中可能遇到几种不同版本的XMLHttpRequest对象(MSXML2.XMLHttp,Microsoft.XMLHTTP)。
1 try{ 2 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 3 } 4 catch(e){ 5 try{ 6 xmlhttp=new ActiveXObject("msxml2.XMLHTTP"); 7 } 8 catch(ex){} 9 }
基于兼容性的考虑,在创建XMLHttpRequest对象时,需要判断浏览器是否支持XMLHttpRequest()方法。
1 if(window.XMLHttpRequest){ 2 xmlhttp = new XMLHttpRequest(); 3 }else if(window.ActiveXObject) 4 try{ 5 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 6 } 7 catch(e){ 8 try{ 9 xmlhttp = new ActiveXObject("msxml2.XMLHTTP"); 10 } 11 catch(ex){} 12 } 13 }
在创建XMLHttpRequest对象后,接着我们要调用一个初始化方法open(),它接受五个参数具体定义如下:
1 void open( 2 DOMString method, //"GET", "POST", "PUT", "DELETE" 3 DOMString url, 4 optional boolean async, 5 optional DOMString user, 6 optional DOMString password 7 );
其中method和url是必填的,async选择是同步还是异步,若为true则表示异步加载,否则为false表示同步加载。method一般情况下,会使用“get”或“post”方法,
GET 还是 POST?
与 POST 相比,GET 更简单也更快,并且在大部分情况下都能用。
然而,在以下情况中,请使用 POST 请求:
使用“get”方法一般在附加参数是,参数信息放在url里边,例如:
1 xmlhttp.open("GET","demo_get2.asp?fname=Bill&lname=Gates",true); 2 xmlhttp.send();
而使用“open”方法时,参数信息,通过send()传送。
1 xmlhttp.open("POST","ajax_test.asp",true); 2 xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 3 xmlhttp.send("fname=Bill&lname=Gates");
其中setRequestHeader()用来添加表头信息。
方法 | 描述 |
---|---|
setRequestHeader(header,value) |
向请求添加 HTTP 头。
|
要注意几点:一是URL相对于执行代码的当前页面(使用绝对路径);二是调用open()方法并不会真正发送请求,而只是启动一个请求准备发送。要真正发送请求要使用send()方法,send()方法可以接受一个参数,即要作为请求主体发送的数据,就像上边使用post方法时的参数。
我们来看看XMLHttpRequest这个对象的属性。
它的属性有:
onreadystatechange 每次状态改变所触发事件的事件处理程序。
responseText 从服务器进程返回数据的字符串形式。
responseXML 从服务器进程返回的DOM兼容的文档数据对象。
status 从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)
status Text 伴随状态码的字符串信息
readyState 对象状态值
1 xmlhttp.onreadystatechange=function(){ 2 if (xmlhttp.readyState==4 && xmlhttp.status==200){ 3 document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 4 } 5 }
一个简单的完整的过程如下:
1 var xmlhttp; 2 if(window.XMLHttpRequest){ 3 xmlhttp = new XMLHttpRequest(); 4 }else if(window.ActiveXObject) 5 try{ 6 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 7 } 8 catch(e){ 9 try{ 10 xmlhttp = new ActiveXObject("msxml2.XMLHTTP"); 11 } 12 catch(ex){} 13 } 14 } 15 xmlhttp.onreadystatechange=function(){ 16 if (xmlhttp.readyState==4 && xmlhttp.status==200){ 17 document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 18 } 19 } 20 xmlhttp.open("GET","/ajax/test1.txt",true); 21 xmlhttp.send();
如上所示,函数首先检查XMLHttpRequest的整体状态并且保证它已经完成(readyStatus=4),即数据已经发送完毕。然后根据服务器的设定询问请求状态,如果一切已经就绪(status=200),那么就执行下面需要的操作。
对于XmlHttpRequest的两个方法,open和send,其中open方法指定了:
如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作。我们需要根据实际需要来指定同步方式,在某些页面中,可能会发出多个请求,甚至是有组织有计划有队形大规模的高强度的request,而后一个是会覆盖前一个的,这个时候当然要指定同步方式。
Send方法用来发送请求。
ajax的优点
Ajax的给我们带来的好处大家基本上都深有体会,在这里简单的讲几点:
ajax的缺点
以上为个人的一些见解,有问题欢迎指正
本文参考文档:http://www.cnblogs.com/ustbwuyi/archive/2007/02/08/645061.html#2215165、http://www.w3school.com.cn/ajax
标签:
原文地址:http://www.cnblogs.com/dongcanliang/p/5538479.html