Ajax入门

AJAX入门

AJAX全称“AsynchronousJavaScriptandXML”(异步JavaScript和XML)是JavaScript,CSS,DOM,XmlHttpRequest4种技术的集合体,主要应用于异步获取后台数据和局部刷新。是一种创建交互式网页应用的网页开发技术。

传统的web应用允许用户填写表单(form),当提交表单时就向web服务器发送一个请求。服务器接收并处理传来的表单,然后返回一个新的网页。这个做法浪费了许多带宽,因为在前后两个页面中的大部分HTML代码往往是相同的。由于每次应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这导致了用户界面的响应比本地应用慢得多。

与此不同,AJAX应用可以仅向服务器发送并取回必需的数据,它使用SOAP或其它一些基于XML的webservice接口,并在客户端采用JavaScript处理来自服务器的响应。因为在服务器和浏览器之间交换的数据大量减少,结果我们就能看到响应更快的应用。同时很多的处理工作可以在发出请求的客户端机器上完成,所以Web服务器的处理时间也减少了。

通过与传统Web开发模式比较可知Ajax应用程序的优势在于:

通过异步模式,提升了用户体验

优化了浏览器和服务器之间的传输,减少不必要的数据往返,减少了带宽占用

Ajax引擎在客户端运行,承担了一部分本来由服务器承担的工作,从而减少了大量用户量下的服务器负载。

………………………………………………………………………………………………………

XmlHttpRequest的属性

onreadystatechange指定当readyState属性改变时的事件处理句柄,只写。

readyState返回当前请求的状态,只读。

responseBody将回应信息正文以unsignedbyte数组形式返回,只读

responseStream以AdoStream对象的形式返回响应信息,只读。

responseText将响应信息作为字符串返回,只读。

responseXML将响应信息格式化为XmlDocument对象并返回,只读。

status返回当前请求的http状态码,只读。

statusText返回当前请求的响应行状态,只读。

XmlHttpRequest的方法

abort取消当前请求

getAllResponseHeaders获取响应的所有http头

getResponseHeader从响应信息中获取指定的http头

open创建一个新的http请求,并指定此请求的方法、URL以及验证信息(用户名/密码)//常用

send发送请求到http服务器并接收回应//常用

setRequestHeader单独指定请求的某个http头

语法:

onreadystatechang指定当readyState属性改变时的事件处理句柄,只写

xmlHttp.onreadystatechange=getReady;

functiongetReady(){

//返回当前请求的状态,readyState共有四种状态(0,1,2,3,4)

//4(完成)数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

if(xmlHttp.readyState==4){

if(xmlHttp.status==200){

objectDiv.innerHTML="完成!!!";

}else{

objectDiv.innerHTML="抱歉,加载数据失败!原因:"+xmlHttp.statusText;

}

}

}

readyState返回当前请求的状态,只读。readyState,变量。定义如下:

0(未初始化)对象已建立,但是尚未初始化(尚未调用open方法)

1(初始化)对象已建立,尚未调用send方法

2(发送数据)send方法已调用,但是当前的状态及http头未知

3(数据传送中)已接收部分数据,因为响应及http头不全,这时通过responseBody和responseText获取部分数据会出现错误,

4(完成)数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

responseText将响应信息作为字符串返回,只读。

xmlHttpObj.responseText;

responseBody,responseStream,responseText,responseXML与之相似

responseXML可以返回一个文档树(DOM),可以使用:

document.getElementsByTagName,

document.getElementsByTagNameNS,

document.getElementById等对其操作

stateus返回当前请求的http状态码,只读。

200表示请求的响应成功!!!

open创建一个新的http请求,并指定此请求的方法、URL以及验证信息

xmlHttpObj.open(Method,URL[,Async][,User][,PassWord]);[]表示可选

参数:

Method:POST|GET(大小写不敏感)

URL:请求的URL地址,可以为绝对地址也可以为相对地址。

Async:[true|fase]是否同步,默认为true。

User:如果服务器需要验证,此处指定用户名,如果未指定,当服务器需要验证时,则会弹出验证窗口。

Password:验证信息中的密码部分,如果用户名为空,则此值将被忽略。

send发送请求到http服务器并接收回应

xmlHttpObj.send([Text]);

参数:

Text:要发送的数据,默认为空(null);

一个简单完整的XMLHTTP例子:

<scripttype="text/javascript">

varobjectDiv;

varxmlHttp;

functiongetXML(){

objectDiv=document.all.divHtml;

objectDiv.innerHTML="正在装载数据,请稍后...";

//针对IE和其他类型的浏览器建立这个对象的不同方式写不同的代码

if(window.XMLHttpRequest){

xmlHttp=newXMLHttpRequest();

//针对某些特定版本的mozillar浏览器的bug进行修正

if(xmlHttp.overrideMimeType){

xmlHttp.overrideMimeType("text/xml");

}

}elseif(window.ActiveXObject){

//针对IE6,IE5

//将两个用于创建XMLHTTPRequest对象的控件名称,保存在一个js的数组中

//排在前面的版本较新针对高版本浏览器

varactivexName=["MSXML2.XMLHTTP","Microsoft.XMLHTTP"];

for(vari=0;i<activexName.length;i++){

try{

//取出一个控件名进行创建,如果创建成功就终止循环

//如果创建失败,抛出异常,然后可以继续循环,继续尝试创建

xmlHttp=newActiveXObject(activeName[i]);

break;

}catch(e){

}

}

}

//开发阶段测试用例判断创建xmlHttp是否成功

/**

if(!xmlHttp){

alert("XMLHttpRequest对象创建失败!!!");

return;

}else{

alert(xmlHttp);

}

*/

//指定当readyState属性改变时的事件处理句柄,只写。

xmlHttp.onreadystatechange=getReady;

xmlHttp.open("GET","ajax/1103Schema.xml",true);

xmlHttp.send();

}

functiongetReady(){

//返回当前请求的状态,readyState共有四种状态(0,1,2,3,4)

//4(完成)数据接收完毕,此时可以通过通过responseBody和responseText获取完整的回应数据

if(xmlHttp.readyState==4){

if(xmlHttp.status==200){

objectDiv.innerHTML="完成!!!";

}else{

objectDiv.innerHTML="抱歉,加载数据失败!原因:"+xmlHttp.statusText;

}

}

}

functionxmlhttpOnclick(){

if(xmlHttp&&xmlHttp.responseText){

//alert(xmlHttp.responseText);

objectDiv.innerHTML=xmlHttp.responseText;

}

}

</script>

</head>

<body>

xmlhttp异步的例子:

URL:<inputvalue="http://localhost:8080/ajaxDemo/ajax/1103Schema.xml"style="width:600px">

<inputonclick="getXML()"type="button"value="得到源代码">

<inputonclick="xmlhttpOnclick()"type="button"value="显示源代码">

<divid="divHtml"></div>

</body>

相关推荐