IT新技術名詞:AJax和SOAP——異步數據和XML獲取
AJax:原文Asynchronous Javascript and XML applications,其實就是那些通過Javascript來異步取得XML數
據的應用!
我覺得這個縮寫最狹隘了,因為我完全可以把JS換成VBS嘛,那不就可以縮寫成AVAX了?!
從這點上說,遠不如SOAP,它的原文應該是Simple Object Access Protocol,簡單對象訪問協議(汗哪,我也
不敢確認呢。其實使用的對象和技術就是XMLHTTP)。它就標准和廣義多了,指的是所有通過客戶端SCRIPT來異
步取得XML數據的應用,自然包括JS、VBS或其它腳本了。
給個小例子:
<script type="text/Javascript">
<!--
function AJaxRead(file){
var XMLObj = null;
if(window.XMLHttpRequest){ //如果浏覽器直接支持window.XMLHttpRequest對象
xmlObj = new XMLHttpRequest();
if (xmlObj.overrideMimeType) {xmlObj.overrideMimeType('text/XML');}//防止有些版本的Mozilla
?g?[器在伺服器送回的?Y料未含XML mime-type?n?^(header)?r出?e
} else if(window.ActiveXObject){ //如果浏覽器支持window.ActiveXObject對象
try {
xmlObj = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlObj = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
} else {
return; //浏覽器啥都不支持,我也只有啥都不干了:p
}
if (!XMLObj) {
alert('Giving up :( Cannot create an XMLHTTP instance');
return;
}
xmlObj.onreadystatechange = function(){ //當XMLobj在異步執行方式下狀態發生變化時觸發本事件
if(XMLObj.readyState == 4){
if (XMLObj.status == 200) { //HTTP狀態碼,未出錯。可參考.statusText
document.getElementById('XMLObj').firstChild.data =
xmlObj.responseXML.getElementsByTagName('data')[0].firstChild.data; //document.getElementById
('XMLObj')的.firstChild.data也可換成.innerHtml
} else {
alert('There was a problem with the request.');
return;
}
}
}
XMLObj.open ('GET', file, true); //打開連接:請求方式,文件名(基於安全考量,你不能叫用同?W域以
外的?W??。但你應該可以在IE的internet選項裡放開吧),異步/同步
XMLObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //如果.open以POST
方式打開
xmlObj.send (''); //必須執行此指令,否則XMLHttpRequest對象的狀態不會變為4!
}
//-->
</script>
注:
XMLHttpRequest對象的狀態總共有五個狀態,由0走到4。
0 – 尚未初始化(在這個XMLHttpRequest開始前)
1 – 加載(XMLHttpRequest初始化一結束)
2 – 加載結束(XMLHttpRequest一從服務器上獲得一個回應)
3 – 交互(當XMLHttpRequest對象和服務器連接中)
4 – 結束(當XMLHttpRequest被告知它已經完成了所有人物並結束運行)
IE5以上支持~~
除了XMLHTTP對象外,還涉及CSS和DOM技術。
優勢:
消除了每次同服務器交互都必須整個頁面進行刷新。
更快地同服務器進行交互,部分頁面永遠比要求服務器返回整個頁面的數量流量小很多。
山風(Lanyd)寄語:
其實,不一定非要XMLHTTP,難道說TXT文件就不能通過HTTP來異步訪問了?如果有人提供了一個具有XMLHTTP功
能的TXTHTTP對象,我們就可以實現了(只是以前一直沒人有這個想法罷了)。其實,目前XMLHTTP就已經支持
TXT,用XMLHTTP.repsponeText就能得到。只不過,XML比TXT的描述統一和標准得多,還是那句話,TXT可以完
全自定義,XML就通用多了:)