AJAX详解
一.同步交互和异步交互: 同步:发送方发出数据后,等待接收方发回响应以后才发下一个数据包的通讯方式。 异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
二.什么是AJAX: AJAX是一种不用刷新整个页面便可于服务器通讯的方法。
三.AJAX的缺陷:
四.XMLHttpRequest对象初始化 function ajaxFunction(){ var xmlHttp; try{ // Firefox,Opera 8.0+,Safari xmlHttp=new XMLHttpRequest(); } catch (e){ try{// Internet Explorer xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e){ try{ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){} } } return xmlHttp; }XMLHttpRequest对象方法:
XMLHttpRequest对象属性:
发送请求--方法和属性介绍:
①onreadystatechange:
(1)该事件处理函数由服务器触发,而不是用户
(2)在 Ajax 执行过程中,服务器会通知客户端当前的通信状态。这依靠更新 XMLHttpRequest 对象的 readyState 来实现。改变 readyState 属性是服务器对客户端连接操作的一种方式。
(3)每次 readyState 属性的改变都会触发 readystatechange事件
②open(method,url,asynch):
(1)第一个参数有get/post两个值 (2)第二个参数为请求url,可以是相对路径,也可以是绝对路径注意:在某些情况下,有些浏览器会把多个XMLHttpRequest请求的结果缓存在同一个URL。如果对每个请求的响应不同,这就会带来不好的结果。把当前时间戳追加到URL的最后,就能确保URL的惟一性,从而避免浏览器缓存结果。new Date().getTime() (3)asynch:表示请求是否要异步传输,默认值为true(异步)。指定true,在读取后面的脚本之前,不需要等待服务器的相应。指定false,当脚本处理过程经过这点时,会停下来,一直等到Ajax请求执行完毕再继续执行。
③send(data): (1)open 方法定义了 Ajax 请求的一些细节。send 方法可为已经待命的请求发送指令 (2)data:将要传递给服务器的字符串。 (3)若选用的是 GET 请求,则不会发送任何数据, 给 send 方法传递 null 即可:request.send(null); (4)当向send()方法提供参数时,要确保open()中指定的方法是POST,如果没有数据作为请求体的一部分发送,则使用null. (5)使用get请求时send方法参数时null,如果传值的话,服务器也接收不到
④setRequestHeader(header,value): (1)当浏览器向服务器请求页面时,它会伴随这个请求发送一组首部信息。这些首部信息是一系列描述请求的元数据(metadata)。首部信息用来声明一个请求是 GET 还是 POST。 (2)Ajax 请求中,发送首部信息的工作可以由 setRequestHeader完成 (3)如果用 POST 请求向服务器发送数据,需要将 “Content-type” 的首部设置为 “application/x-www-form-urlencoded”.它会告知服务器正在发送数据,并且数据已经符合URL编码了。 (4)该方法必须在open()之后才能调用
接收--方法和属性介绍: ①readyState:该属性表示Ajax请求的当前状态。它的值用数字代表。 (1) 0 代表未初始化。 还没有调用 open 方法 (2)每次 readyState 值的改变,都会触发 readystatechange 事件。如果把 onreadystatechange 事件处理函数赋给一个函数,那么每次 readyState 值的改变都会引发该函数的执行。 (3)readyState 值的变化会因浏览器的不同而有所差异。但是,当请求结束的时候,每个浏览器都会把 readyState 的值统一设为 4
②responseText:该属性包含了从服务器发送的数据。它是一个HTML,XML或普通文本,这取决于服务器发送的内容。 当 readyState 属性值变成 4 时,responseText 属性才可用,表明 Ajax 请求已经结束。
用GET和POST方式请求的AJAX例子: JS中代码 function ajaxFunction(){ var xmlHttp; try{ // Firefox,Safari xmlHttp=new XMLHttpRequest(); } catch (e){ try{// Internet Explorer xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e){ try{ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e){} } } return xmlHttp; } function test_get(){ //1.创建XMLHttpRequest对象 var xmlhttpreques = ajaxFunction(); /* * 2.处理服务器的返回信息 * 每次 readyState 属性的改变都会触发 readystatechange事件 * 0 代表未初始化。 还没有调用 open 方法 * 1 代表正在加载。 open 方法已被调用,但 send 方法还没有被调用 * 2 代表已加载完毕。send 已被调用。请求已经开始 * 3 代表交互中。服务器正在发送响应 * 4 代表完成。响应发送完毕 */ xmlhttpreques.onreadystatechange = function(){ // if(xmlhttpreques.readyState==4){ if(xmlhttpreques.status==200||xmlhttpreques.status==304){ alert(xmlhttpreques.responseText); } } } /* * 3.打开和服务器的连接 * open(method,asynch) * *method:请求方法 get post * *url:字符串路径,指向服务器上被请求的文件。可以是绝对路径或相对路径。 * *asynch表示请求是否为异步传输,默认是true(异步) */ xmlhttpreques.open("get","servlet/TestServletAjax?name=xxc&timeStamp="+new Date().getTime(),true); //4.发送请求 若使用的是get请求,则不会发送任何数据,传递参数为null即可,就算传递参数服务器端也接收不到 xmlhttpreques.send(null); } function test_post(){ var xmlhttprequest = ajaxFunction(); xmlhttprequest.onreadystatechange = function(){ if(xmlhttprequest.readyState == 4){ if(xmlhttprequest.status == 200 || xmlhttprequest.readyStatus ==304){ alert(xmlhttprequest.responseText); } } } xmlhttprequest.open("POST","servlet/TestServletAjax?timestamp="+new Date().getTime()+"&name=xxc",true); /* * 如果用 POST 请求向服务器发送数据,需要将 “Content-type” 的首部设置为 “application/x-www-form-urlencoded”. * 它会告知服务器正在发送数据,并且数据已经符合URL编码了。该方法必须在open()之后才能调用 */ xmlhttprequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); xmlhttprequest.send("name=pkq"); } Servlet中代码 public class TestServletAjax extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html;charset=utf-8"); System.out.println("get执行"); response.getWriter().println("AJAX_GET成功返回"); } public void doPost(HttpServletRequest request,IOException { response.setContentType("text/html;charset=utf-8"); System.out.println("post执行"); System.out.println(request.getParameterValues("name")[0]); System.out.println(request.getParameterValues("name")[1]); response.getWriter().println("AJAX_POST成功返回"); } }
用JS读取XML文件: //用于加载xml文件的,并返回xml文件对象 function parseXml(fileName){ var xmlDoc=null; try {//Internet Explorer xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); }catch(e){ try {//Firefox,Mozilla,Opera,etc. xmlDoc=document.implementation.createDocument("","",null); }catch(e){ } } //关闭异步加载,这样确保在文档完全加载之前解析器不会继续脚本的执行。 xmlDoc.async=false; //解析器加载名为 "cities.xml" 的 XML 文档 xmlDoc.load(fileName); return xmlDoc; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |