ajax|xml|資料|非同步
IT新技術名詞:AJAX和SOAP——非同步資料和XML擷取
AJAX:原文Asynchronous Javascript and XML applications,其實就是那些通過javascript來非同步取得xml數
據的應用!
我覺得這個縮寫最狹隘了,因為我完全可以把JS換成VBS嘛,那不就可以縮寫成AVAX了?!
從這點上說,遠不如SOAP,它的原文應該是Simple Object Access Protocol,簡易物件存取通訊協定 (SOAP)(汗哪,我也
不敢確認呢。其實使用的對象和技術就是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就通用多了:)