17.JavaWeb基础 Ajax(局部刷新)

来源:互联网 发布:传奇世界db数据库参数 编辑:程序博客网 时间:2024/05/29 04:35








  Ajax技术主要完成页面的局部刷新,通过Ajax技术可以使程序在每次提交的时候不用进

行页面的整体刷新,从而提升操作的性能,在Ajax中主要是依靠XMLHttpRequest对象完成

操作。




最典型的例子就是:Goole Map。使用了大量的Ajax技术。









一.Ajax简介

  Ajax(Asynchronous JavaScript and XML,异步JavaScript和XML)并不是一项

新的技术,它产生的主要目的是为了页面的局部刷新。每当用户向服务器端发送请求的时候,哪怕

需要一点点简单的更新局部内容,服务器端都会将一个整体的页面进行一次刷新,并重新生成代码

这样程序的性能就会有所降低。如果采用了Ajax技术,就可以实现局部的内容变更,从而使处理的

性能比前者高很多。




  Ajax本身是一门综合性的技术,其主要应用包括了HTML、JavaScript、XML、DOM、XMLHttp

-Request等页面技术,但是在这些之中,最重要的是XMLHttpRequest对象。










二.XMLHttpRequest对象

在Ajax中主要通过XMLHttpRequest对象处理发送异步请求和回应的。


XMLHttpRequest对象的属性属性描述onreadystatechange用于指定当readyState改变时的回调函数readyState返回当前请求状态,只读responseBody回应信息正文以unsigned byte数组形式返回,只读responseStream以Ado Stream对象的形式返回响应信息,只读responseText
接收以普通文本返回的数据,只读responseXML
接收以XML文本返回的数据,只读status返回当前请求的http状态码,只读statusText返回当前请求的http响应行代码,只读




readyState 一共有5种取值,分别介绍一下:


 0:请求没发出(open()方法之前)

 1:请求已经建立但没发出(send()方法之前)

 2:请求已经发出正在处理之中(到这里就可以从响应信息得到内容头部)

 3:请求已经从处理,正在接收服务器的信息,响应中通常有部分数据可用,但是服务器还没有完成响应。

 4:响应已经完成,可以访问服务器响应并使用它。






XMLHttpRequest的方法方法描述abort()取消当前所发送的请求getAllResponseHeaders()取得所有的HTTP头信息getResponseHeader()取得一个指定的HTTP头信息open()创建一个HTTP请求,并指定请求模式(get、post)send()将创建的请求发送到服务器端,并接收回应信息setRequestHeader()设置一个指定请求的HTTP头信息










三.Ajax返回普通数据


返回数据的页面:

Hello Ajax



Ajax异步处理接受:

<!DOCTYPE html><html><head><title>a1.html</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><script type="text/javascript" lang="JavaScript">var xmlHttp;//1.创建XMLHttpRequestfunction createXMLHttp() {//使用的是FireFoxif (window.XMLHttpRequest) {xmlHttp = new XMLHttpRequest();//使用的是IE内核} else {xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}}function showMsg() {createXMLHttp();//2.open()xmlHttp.open("POST", "content.html");//3.设置请求完成之后的回调函数xmlHttp.onreadystatechange = showMsgCallback;//4.send()xmlHttp.send(null);}//回调函数function showMsgCallback() {//数据返回完毕if (xmlHttp.readyState == 4) {//HTTP操作正常if (xmlHttp.status == 200) {var text = xmlHttp.responseText;document.getElementById("msg").className = "给你一个新的名称";document.getElementById("msg").innerHTML = text;}}}</script><input type="button" value="调用Ajax" onclick="showMsg()"><p><div id="msg" style="font-size: 20px;font-weight: bold;"></div></p></body></html>















由于有一段代码document.getElementById("msg").className = "给你一个新的名称"

打开Firebug:





看到了div中的添加了class。









四.Ajax返回XML数据

  在XMLHttpRequest对象中可以调用responseXML()方法接收一组返回的XML数据,这些返

回的XML数据可以动态生成(利用JDOM工具将数据库中的数据变为XML文件),也可以直接读取一

个XML文件,当客户端接收到读取的XML文件之后,可以通过DOM解析的方式对数据进行操作。



读取的XML文件: 

<?xml version="1.0" encoding="UTF-8"?><message><me><name>CaMnter</name><everytime>Save you from anything 07</everytime></me><she><name>07</name><everytime>Never remember me</everytime></she></message>


Ajax异步处理:

<!DOCTYPE html><html><head><title>a2.html</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head><body><script type="text/javascript" lang="JavaScript">var xmlHttp;//1.创建XMLHttpRequestfunction createXMLHttp() {if (window.XMLHttpRequest) {xmlHttp = new XMLHttpRequest();} else {xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}}function sendRequest() {createXMLHttp();//2.open()xmlHttp.open("POST", "msg.xml");//3.设置请求完成之后的回调函数xmlHttp.onreadystatechange = getXMLContent;xmlHttp.send(null);}function getXMLContent() {if (xmlHttp.readyState == 4) {if (xmlHttp.status == 200) {var xmlDoc = xmlHttp.responseXML;var message = xmlDoc.getElementsByTagName("message");var me = message.item("me");var she = message.item("she")document.getElementById("me_name").innerHTML = me.getElementsByTagName("name")[0].firstChild.nodeValue;document.getElementById("me_everytime").innerHTML = me.getElementsByTagName("everytime")[0].firstChild.nodeValue;document.getElementById("she_name").innerHTML = me.getElementsByTagName("name")[1].firstChild.nodeValue;document.getElementById("she_everytime").innerHTML = me.getElementsByTagName("everytime")[1].firstChild.nodeValue;}}}</script><input type="button" value="显示" onclick="sendRequest()"><p><div id="me_name" style="font-size: 20px;font-weight: bold;"></div><div id="me_everytime" style="font-size: 20px;font-weight: bold;"></div></p><p><div id="she_name" style="font-size: 20px;font-weight: bold;"></div><div id="she_everytime" style="font-size: 20px;font-weight: bold;"></div></p></body></html>























0 0
原创粉丝点击