在web中异步访问时通过XMLHttpRequest对象来实现的,要使用该对象,首先必须创建该对象吧!代码如下:
- var xmlHttp;
- function createXMLHttpRequest() {
- if (window.ActiveXObject)
- xmlHttp = new ActiveXObject("Microsoft.XMLHttp");
- else
- xmlHttp = new XMLHttpRequest();
以上代码首先声明了一个全局变量xmlHttp,这主要考虑到异步对象在整个页面进程中都有可能是用的到,然后创建异步对象的函数createXMLHttpRequest(),为了考虑到浏览器的兼容性,在该函数中主要利用if语句进行浏览器的判断,如果是IE浏览器,则采用ActiveXObject的创建方法,如果不是则直接利用XMLHttpRequest()函数.在创建异步对象之后,自然利用该对象来连接服务器,该对象有一系列有用的属性和方法,如下图:
创建完XMLHttpRequest对象后首先是利用open()方法创建一个请求,并向服务器发送,该方法的完整表达式如下:
- open(method,url,asynchronous,user,passpword)
其中method表示请求的类型,通常为get,post等,url即请求的地址,可以使绝对地址也可以使相对地址,asynchronous是一个布尔值,表示是否为异步请求,默认为异步请求true。user,passoword分别是可选的用户名,密码。创建了异步对象后,要建立一个到服务器的请求可以使用如下代码:
- xmlHttp.open(“get","Handler.ashx",true);
以上代码是用get方法请求相对地址为Handler.ashx的页面,方式是异步的,在发出请求之后便需要使用请求状态readyState属性来判断目前请求的情况,如果该属性变化了就会触发onreadystatechange事件,因此通常的代码如下:
- xmlHttp.onreadystatechange=function(){
- f(xmlHttp.readyState==4)
- /do something
也就是直接编写onreadystatechange的事件函数,如果状态为4(数据接收成功)则继续操作,但是通常情况下,不但需要判断请求的状态,还需要判断服务器返回的响应状态status,代码如下
- xmlHttp.onreadystatechange=function(){
- if(xmlHttp.readyState==4&&xmlHttp.status==200)
- //do something
- }
以上两段代码仅仅是建立了请求,并编写了请求状态变化时的处理函数,然而并没有将该请求发送给服务器,还需要用send()方法来发送请求,代码如下:
- send(body);
改方法仅有一个参数body,她表示要向服务器发送的数据,其格式为查询字符串的形式,例如; var body="myName=Isaac&age=25"
服务器在接收到客服端的请求后,根据请求的返回响应的结果,这个结果通常有两种形式,一种是文本形式,存储在responseText中,另一种是XML格式,存储在responseXML中,客服端程序可以对前者进行字符串的处理,对后者进行DOM相关的处理,例如可以对服务器返回的值做如下处理:
Response.write(getElementById(“target”).innerHTML=xmlHttp
整个代码如下:
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title></title>
- <script type="text/javascript">
- var xmlHttp;
- //创建XMLHttpRequest对象函数
- function createXMLHttpRequest() {
- if (window.ActiveXobject)//for IE
- xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
- else if (window.XMLHttpRequest)
- xmlHttp = new XMLHttpRequest();
- }
- function startRequest() {
- createXMLHttpRequest();
- //利用XMLHttpRequest对象的open方法创建一个请求。第一个参数,表示请求的类型,
- //一般为get,post,第二个参数为ulr请求地址,可以是绝对地址也可以是相对地址,第三个参数是布尔值,ture表示是异步请求,
- var Url = "Handler1.ashx?" + new Date().getTime();
- xmlHttp.open("GET", Url, true);
- //在发出请求之后便需要使用请求状态readyState属性来判断目前请求的情况,如果该属性变化了,就会触发onreadystatechange事件,
- xmlHttp.onreadystatechange = function () {
- if (xmlHttp.readyState == 4 && xmlHttp.status == 200)//如果readState的状态时4(数据接收成功)则继续操作,status=200请求成功表示
- //服务器在接收到客服端请求后,根据请求返回相应的结果,有两种,一种是文本形式,存储在responseText中,另一种是XML格式,存储在responseXML中,客服端可以对前者进行字符串的处理,对后者进行DOM相关的处理,
- //document.write("服务器还回:" + xmlHttp.responseText);
- document.getElementById("target").innerHTML = xmlHttp.responseText;
- }
- xmlHttp.send(null);//以上代码都是建立请求,send方法发出请求,对于HTTP的post请求send方法里的参数必须要有如果是post请求发送前,还需要xmlHttp.setRequest("Content-Type","application/x-www-from-urlencoded")来设置HTTP的头
- }
- </script>
- </head>
- <body>
- <input type="button" value="测试" onclick="startRequest()" />
- <br /><br />
- <div id="target"></div>
- </body>
- </html>
- context.Response.CacheControl = "no-cache";
- context.Response.AddHeader("Pragma", "no-cache");
- context.Response.Write("异步测试成功");
- }