AJAX即“Asynchronous JavaScript and XML”,意思是异步JavaScript和XML,是指一种创建交互式网页的网页开发技术
给AJAX统一了一个流程,要想实现AJAX,就要按照以后步骤走:(1)创建XMLHttp对象。(2)设置请求方式。(3)调用回调函数。(4)发送请求。
下面详细解释这4个步骤。 (1)创建XMLHttp对象:
XMLHttp对象用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。创建XMLHttp对象的语法是:var xmlHttp=new XMLHttpRequest();如果是IE5或者IE6浏览器,则使用ActiveX对象,创建方法是:var xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");一般我们手写AJAX的时候,首先要判断该浏览器是否支持XMLHttpRequest对象,如果支持则创建该对象,如果不支持则创建ActiveX对象。JS代码如下:
1 var xmlHttp;2 if(window.XMLHttpRequest){3 xmlHttp=new XMLHttpRequest();4 }5 else if(window.ActiveXObject){6 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");7 }
(2)设置请求方式:
在WEB开发中,请求有两种形式,一个是get 一个是post,所以在这里需要设置一下具体使用哪个请求,XMLHttpRequest对象的open()方法就是来设置请求方式的。open():功能:规定请求的类型、URL 以及是否异步处理请求。参数:参数1,设置请求类型(GET 或 POST),GET与POST的区别请自己百度一下,这里不做解释;参数2,文件在服务器上的位置;参数3,是否异步处理请求,是为true,否为false。具体的JS代码实现如下:xmlHttp.open("POST","test.do?method=ajaxTest&&msg="+new Date(),true);
在上段代码中,请求的名字是:"test.do?method=ajaxTest&&msg="+new Date(),后面有个new Date(),这里主要是防止缓存问题,如果是不段的更新页面内容,那么很可能就会出现点击按钮后内容页不改变,因为如果没有后面的msg=new Date()那么我们每一次发送的请求都是一样的,这样很可能就导致了缓存问题。所以需要在请求后面加上msg=new Date(),这样保障了每次的请求都不一样,避免缓存问题。
(3)回调函数:
如果在上一步中open方法的第三个参数选择的是true,那么当前就是异步请求,这个时候需要写一个回调函数,xmlHttp对象有一个onreadystatechange属性,这个属性返回的是一个匿名的方法,所以回调函数就在这里写xmlHttp.onreadystatechange=function{},function{}内部就是回调函数的内容。所谓回调函数,就是请求在后台处理完,再返回到前台所实现的功能。在这个例子里,我们的回调函数要实现的功能就是接收后台处理后反馈给前台的数据,然后将这个数据显示到指定的div上。因为从后台返回的数据可能是错误的,所以在回调函数中首先要判断后台返回的信息是否正确,如果正确才可以继续执行。代码如下:1 if(xmlHttp.readyState==4){2 if(xmlHttp.status==200){3 document.getElementById("testid").value=xmlHttp.responseText;//将信息显示到页面4 }else{5 alert("AJAX服务器返回错误!");6 } 7 }
在上面代码中,xmlHttp.readyState是存有XMLHttpRequest 的状态。
从 0 到 4 发生变化。0: 请求未初始化。1: 服务器连接已建立。2: 请求已接收。3: 请求处理中。4: 请求已完成响应已就绪。所以这里我们判断只有当xmlHttp.readyState为4的时候才可以继续执行。 xmlHttp.status是服务器返回的结果,其中200代表正确。404代表未找到页面,所以这里我们判断只有当xmlHttp.status等于200的时候才可以继续执行。document.getElementById("testid").value=xmlHttp.responseText;这段代码就是回调函数的核心内容,就是获取后台返回的数据,然后将这个数据赋值给id为testid的div。xmlHttp对象有两个属性都可以获取后台返回的数据,
分别是:responseText和responseXML,其中responseText是用来获得字符串形式的响应数据,responseXML是用来获得 XML 形式的响应数据。至于选择哪一个是取决于后台给返回的数据的,这个例子里我们只是显示一条字符串数据所以选择的是responseText。responseXML将会在以后的例子中介绍。
(4)发送请求:发送请求是调用xmlHttp对象的send()方法。代码如下: xmlHttp.send();