您的位置:首页 > 理论基础 > 计算机网络

Ajax与XMLHttpRequest对象

2012-01-11 15:33 513 查看
======================================================

注:本文源代码点此下载

======================================================

xmlhttprequest是xmlhttp组件的对象,通过这个对象,ajax可以像桌面应用程序一样只与服务器进行数据层的交换,而不必每次都刷新界面,也不必每次将数据处理的工作都交给服务器来做;这样既减轻了服务器负担又回忆了响应速度,缩短了用户的等待时间。
xmlhttprequest对象与ajax
在ajax应用程序中,xmlhttprequest对象负责将用户信息以异步通信地发送到服务器端,并接收服务器响应信息和数据。
需要注意的是javascript本身并不具有向服务器发送请求的能力,要么使用window.open()方法重新打开一个页面,要么使用xmlhttprequest对象发送请求,不同的是,前者是普通的即同步交互模式,而后者是异步交互模式。
xmlhttprequest对象的属性和方法。
ie5.0开始,开发人员就可以在web页面内部使用xmlhttp activex组件扩展自身的功能,而mozilla1.0及netscape7则是创建继承xml的代理类xmlhttprequest;对于大多情况xmlhttprequest和xmlhttp组件很相似,方法和属性类似,只是部份属性不同。以下代码演示了如果在ie以及netscape等浏览器中创建xmlhttprequest对象。




script
language="javascript">



//定义一个变量


var http_request = false;


//ie浏览器中创建


http_request = new activexobject("msxml2.xmlhttp");//新版本ie


http_request = new activexobject("microsoft.xmlhttp");//旧版本ie


//netscope浏览器


http_request = new xmlhttprequest();


script>
需要注意的是 在微软最新的 ie7.0版本浏览器中也已经支持了xmlhttprequest,也就是说在ie7.0中同时支持以及上二种创建方式。在我们开发ajax应用程序时一定要注意要兼容浏览器类型。
创建方式可以如下:


var http_request = false;


function createxmlhttprequest()






{


http_request = false;


//开始初始化xmlhttprequest对象


if(window.xmlhttprequest)//如果是window.xmlhttprequest对象






{


//mozilla,netscape 浏览器


http_request = new xmlhttprequest();




if
(http_request.overridemimetype)

{//设置mime类别


//有些版本的浏览器在处理服务器返回的未包含xml mime-type头部信息的内容时会报错,因此,要确保返回的内容包含text/xml信息。


http_request.overridemimetype("text/xml");


}


}


else if(window.activexobject)//如果是window.activexobject






{


//ie浏览器


try






{


http_request = new activexobject("msxml2.xmlhttp");//ie较新版本


}


catch (e)






{


try






{


http_request = new activexobiect("microsoft.xmlhttp"); //ie旧版本


}




catch
(e)

{}


}


}


if(!http_request)






{


//异常,创建对象实例失败


window.alert("不能创建xmlhttprequest对象实例。");


return false;


}


}
这样就是一个简单的跨浏览器的创建方法。
另外xmlhttprequest对象提供了一系列属性和方法,来向服务器端发起异步http请求,监听服务器状态,并在服务器完成数据响应处理之后接收服务器端返回的信息数据。下面是对其的说明:
xmlhttprequest 对象属性
onreadystatechange:指定当readystate属性改变时的事件处理句柄,属性只写。
xmlhttprequest对象属性onreadystatechange是readystate状态改变的事件触发器,用来指定当readystate属性发生改变时的处理事件。在使用过程中,通常通过将事件处理函数名称赋予onreadystatechange的方式,来为xmlhttprequest指定事件触发器,而在事件处理函数中判断readystate状态值并做相应的处理。
如上:http_request.onreadystatechange = processrequest;processrequest作为事件处理函数,并在processrequest函数体内在readystate状态为 4 时开始执行。
readystate:返回当前请求的状态,属性只读。
这些状态用长度为4的整形数据表示,其属性的状态含义如下:
0:未初始化(对象已经建立,但是未初始化,即尚未调用open方法创建http请求)
1:初始化(对象已经建立,但是未调用send方法发送http请求)
2:发送数据(send方法已经被调用,但是当前的状态以及http头未知)
3:数据传送中(已经接收部分数据,因为响应及http头不全,这时通过response系统方法获取部分数据会出现错误)
4:传送完成(数据完毕,此时可以通过response系统方法获取完整的回应数据)
responsebody:将回应信息正文以unsigned byte 数组形式返回,属性只读。
responsetext:以字符串的形式返回服务器响应信息,属性只读。
responsexml:将响应信息格式化为xml document对象返回,属性只读。
xmlhttprequest对象的方法以及含义如下:
abort:取消当前请求;
语法:http_request.abort();调用此方法,当前请求返回uninitialized状态。
getallresourceheaders:获取相应的全部http头信息;像jsp中的httpservletrequest对象一样,获取http请求的请求头信息,语法:headers = http_request.getallresourceheaders();
getresourceheader:从响应信息中获取指定的http头信息。
语法:head = http_request.getresourceheader("header-name");
open:创建一个新的http请求,并指定此请求的方法,url,以及验证信息(用户名/密码)。
语法:http_request.open(method,url,async,user,password);
async为布尔值,指定请求是否异步方式,默认为true;如果为真,当state状态改变时会调用onreadystatechange属性指向的回调函数。如果服务器需要验证,则应该指定用户名和密码 。
send:发送请求到http服务器并接收回应。创建http请求后,就可以向服务器发送http请求,send方法被调用
语法:http_request.send(varbody);
参数varbody为要发送给服务器的内容。如果没有内容要发送,varbody参数可以省略,但最好写为null,因为如果省略不写在firfox中会报错,所以就为http_request.send(null);。此方法的同步或异步方式取决于open方法中的async参数。
setrequestheader:单独设定请求的某个头。
status:返回当前http请求的状态码,属性只读。如:404=“文件未找到”,200=“成功”
statustext:返回当前http请求的状态行,属性只读。

======================================================

在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定
这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: