niedziela, stycznia 21, 2007

AHAH - hę? co to? - http://microformats.org/wiki/rest/ahah
Asynchronous HTTP and HTML - uproszczona wersja AJAX-a, wykorzystuje JS do dynamicznego uaktualnienia strony. Używa XMLHttpRequest (XHR) do pobrania fragmentów HTML i osadznia ich na stronie przy użyciu CSS. Jest to podzbiór AJAX-a i cechuje się prostotą, przesyła fragmenty HTML (nie musi parsować XML). Dobre przy wizualizacji strony a nie dla przesyłania danych (do tego lepiej używać XML).
function ahah(url, target, delay) {
document.getElementById(target).innerHTML = 'waiting...';
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (req != undefined) {
req.onreadystatechange = function() {ahahDone(url, target, delay);};
req.open("GET", url, true);
req.send("");
}
}

function ahahDone(url, target, delay) {
if (req.readyState == 4) { // only if req is "loaded"
if (req.status == 200) { // only if "OK"
document.getElementById(target).innerHTML = req.responseText;
} else {
document.getElementById(target).innerHTML="ahah error:n"+req.statusText;
}
if (delay != undefined) {
setTimeout("ahah(url,target,delay)", delay); // resubmit after delay
//server should ALSO delay before responding
}
}
}
Executing Javascript

Since the browser won't execute <script> tags when changing innerHTML, you may want to apply the following function call on document.getElementById(target):
var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
var bMoz = (navigator.appName == 'Netscape');
function execJS(node) {
var st = node.getElementsByTagName('SCRIPT');
var strExec;
for(var i=0;i<st.length; i++) {
if (bSaf) {
strExec = st[i].innerHTML;
}
else if (bOpera) {
strExec = st[i].text;
}
else if (bMoz) {
strExec = st[i].textContent;
}
else {
strExec = st[i].text;
}
try {
eval(strExec.split("<!--").join("").split("-->").join(""));
} catch(e) {
alert(e);
}
}
}

Brak komentarzy: