一、由于XMLHttpRequest不是一個(gè)W3C標(biāo)準(zhǔn),所以可以采用多種方法使用JavaScript來(lái)創(chuàng)建XMLHttpRequest的實(shí)例。IE把XMLHttpRequest實(shí)現(xiàn)為一個(gè)ActiveX對(duì)象,其他瀏覽器(如FireFox,Safari和Opera)把它實(shí)現(xiàn)為一個(gè)本地JavaScript對(duì)象。由于存在這些差別,JavaScript代碼中必須包含有關(guān)的邏輯,從而使用ActiveX或者使用本地JavaScript對(duì)象技術(shù)來(lái)創(chuàng)建XMLHttpRequest的一個(gè)實(shí)例。
二、標(biāo)準(zhǔn)XMLHttpRequest操作
abort():停止當(dāng)前請(qǐng)求;
getAllResponseHeaders():把HTTP請(qǐng)求的所有的響應(yīng)首部作為鍵/值對(duì)返回;
getResponseHeader(STring header):返回指定首部的串值;
open(String method,String url,boolean asynch,String username,String password):建立對(duì)服務(wù)器的調(diào)用,method可以是get,pos或put。url參數(shù)可以是相對(duì)url或絕對(duì)url,后面三個(gè)參數(shù)是可選的。asynch表示這個(gè)調(diào)用是異步的還是同步的,默認(rèn)是true,表示請(qǐng)求本質(zhì)上是異步的,如果這個(gè)參數(shù)為false,處理就會(huì)等待,直到從服務(wù)器返回響應(yīng)為止。由于異步調(diào)用是使用Ajax的主要優(yōu)勢(shì)之一,所以倘若將這個(gè)參數(shù)設(shè)置為false,從某種程度上講與使用XMLHttpRequest對(duì)象的初衷不太相符。不過(guò),在某些情況下設(shè)置這個(gè)參數(shù)為false也是有用的,比如在持久存儲(chǔ)頁(yè)面之前可以先驗(yàn)證用戶(hù)的輸入。最后兩個(gè)參數(shù)允許指定一個(gè)特定的用戶(hù)名和密碼。
void send(content):這個(gè)方法具體想服務(wù)器發(fā)出請(qǐng)求,如果請(qǐng)求聲明為異步的,這個(gè)方法就會(huì)立即返回,否則它會(huì)等待直到結(jié)束到響應(yīng)為止。可選參數(shù)可以是DOM對(duì)象的實(shí)例,輸入流,或者串。傳入這個(gè)方法的內(nèi)容會(huì)作為請(qǐng)求體的一部分發(fā)送。
void setRequestHeader(String header,String value):這個(gè)方法為HTTP請(qǐng)求中一個(gè)給定的首部設(shè)置值。注意,這個(gè)方法必須在調(diào)用open()之后才能調(diào)用。
String getAllResponseHeaders():這個(gè)方法返回一個(gè)串,其中包含HTTP請(qǐng)求的所有首部,包括Content-Length、date和url。
三、標(biāo)準(zhǔn)XMLHttpRequest屬性
onreadystatechange:每個(gè)狀態(tài)改變時(shí)都會(huì)觸發(fā)這個(gè)事件器,通常會(huì)調(diào)用一個(gè)javaScript函數(shù);
readyState:請(qǐng)求的狀態(tài)。有5個(gè)可選值:0=未初始化,1=正在加載,2=已加載,3=交互中,4=完成;
responseText:服務(wù)器的響應(yīng),表示為一個(gè)串;
responseXMl:服務(wù)器的響應(yīng),表示為XML,這個(gè)對(duì)象可以解析為一個(gè)DOM對(duì)象;
status:服務(wù)器的HTTP狀態(tài)碼(200對(duì)應(yīng)OK,404對(duì)應(yīng)Not Found(未找到),等等);
statusText:HTTP狀態(tài)碼的相應(yīng)文本(OK或Not Found等等);
四、用于處理XML文檔的DOM元素屬性
childNodes:返回當(dāng)前元素的所有子元素的數(shù)組;
firstChild:返回當(dāng)前元素的第一個(gè)下級(jí)子元素;
lastChild:返回當(dāng)前元素的最后一個(gè)子元素;
nextSibling:返回當(dāng)前元素后面的元素(下一個(gè)兄弟);
nodeValue:指定表示元素值的讀/寫(xiě)屬性;
parentNode:返回當(dāng)前元素的父節(jié)點(diǎn);
previousSibling:返回當(dāng)前元素的前一個(gè)元素(前一個(gè)兄弟);
五、用于遍歷XML文檔的DOM元素方法
getElementById(id):獲取有唯一ID屬性值文檔中的元素;
getElementsByTagName(name):返回當(dāng)前元素中有指定標(biāo)記名的子元素的數(shù)組;
hasChildNodes():返回一個(gè)布爾值,表示元素是否還有子元素;
getAttribute(name):返回元素的屬性值,屬性有name指定;
六、動(dòng)態(tài)創(chuàng)建內(nèi)容時(shí)常用到的DOM屬性和方法
document.createElement(tageName):創(chuàng)建由tagName指定的元素;
document.createTextNode(text):創(chuàng)建一個(gè)包含靜態(tài)文本的節(jié)點(diǎn);
<element>.appendChild(childNode):給當(dāng)前元素增加一個(gè)子節(jié)點(diǎn);
<element>.getAttribute(name):獲取name屬性;
<element>.setAttribute(name,value):設(shè)置name屬性的值;
<element>.insertBefore(newNode,targetNode):把節(jié)點(diǎn)newNode作為當(dāng)前元素的子節(jié)點(diǎn)插入帶targetNode元素的前面
<element>.removeAttribute(name):這個(gè)方法從元素中刪除屬性name;
<element>.removeChild(childNode):刪除子元素;
<element>.replaceChild(newNode,oldNode):替換節(jié)點(diǎn);
七、判斷IE瀏覽器
IE能識(shí)別出名為uniqueID的document對(duì)象的專(zhuān)用屬性,IE也是唯一能識(shí)別這個(gè)屬性的瀏覽器,所以使用這個(gè)屬性可以確定瀏覽器,例如:
if(document.uniqueID){//IE
var radioButton=document.createElement("<input type='radio' name='radioButton' value='checked'>");
}
else{
var radioButton=document.createElement("input");
radioButton.setAttribute("type","radio");
radioButton.setAttribute("name","radioButton");
radioButton.setAttribute("value","checked");
}
八、Struts+AJAX實(shí)例:
1、簡(jiǎn)單的返回文本
Struts端:(頁(yè)面JS端讀取responseText)
/**
* 檢測(cè)VIP客戶(hù)網(wǎng)址
* (-2:處理出錯(cuò),-1:沒(méi)有數(shù)據(jù),0:有客戶(hù)數(shù)據(jù)且不是VIP,1:已經(jīng)是VIP)
*/
public void checkVipuser(ActionMapping actionMapping,ActionForm actionForm,HttpServletRequest request,
HttpServletResponse response) {
PrintWriter out=null;
int result=-2;
try{
out = response.getWriter();
String weburl=request.getParameter("weburl");
//后臺(tái)處理(省略)
out.print(result);
out.flush();
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
2、返回XML
Struts端:(頁(yè)面JS端讀取responseXML)
public void searchEmployee(ActionMappingactionMapping,ActionFormactionForm,HttpServletRequestrequest,HttpServletResponseresponse){
response.setContentType("text/xml;charset=utf-8");
PrintWriterout=null;
try{
out=response.getWriter();
out.print("<?xmlversion=\"1.0\"encoding=\"utf-8\"?>");
out.print("<rootnode>");
out.print("<pro1='valu1' pro2='valu2' pro3='valu3' pro4='valu4'/>");
out.print("</rootnode>");
out.flush();
out.close();
}catch(Exceptione){
e.printStackTrace();
out.print("<?xmlversion=\"1.0\"encoding=\"utf-8\"?>");
out.flush();
out.close();
}
}
posted on 2007-05-30 16:24
破繭而出 閱讀(460)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
AJAX