什么是AHAH?
AHAH:(Asychronous HTML and HTTP)
简单来说,AHAH是一种利用JavaScript动态更新web页面的技术.他通过XMLHTTPRequest来获得动态的html,填充到 web页面中。
和AJAX的关系?
AHAH被认为是一种比AJAX(Asynchronous JavaScript and XML)更简单的web开发方式,严格意义上来说AHAH是AJAX的一个子集,因为(X)HTML本身及时一个特殊形式的XML,但是最为子集的AHAH却有特殊的和有用的特性:
1.无需定义XML schemas可以使设计时间大幅减少
2.使用已有的HTML页面从而避免必须提供特殊的Web服务
3.所有的数据通过浏览器可识别的HTML传输,从而可以很容易的调试和测试
4.HTML直接包含在页面的DOM对象中,无需解析
5.HTML设计者可以使用CSS来格式化显示,无需程序员使用XSLT转换
6.所有的处理都在服务器端完成,客户端不需要编写任何程序
实事上,任何内容的最终都是要转化成浏览器可识别结果,展现在浏览器上。很难想象出转化成自定义的XML格式比HTML有什么优点
参考ahah.js 和 jah.js
Send AHAH Request 
 1 function ahah(url,target) {
 2    // native XMLHttpRequest object
 3    document.getElementById(target).innerHTML = 'sending ';
';
 4    if (window.XMLHttpRequest) {
 5        req = new XMLHttpRequest();
 6        req.onreadystatechange = function() {ahahDone(target);};
 7        req.open("GET", url, true);
 8        req.send(null);
 9    // IE/Windows ActiveX version
10    } else if (window.ActiveXObject) {
11        req = new ActiveXObject("Microsoft.XMLHTTP");
12        if (req) {
13            req.onreadystatechange = function() {ahahDone(target);};
14            req.open("GET", url, true);
15            req.send();
16        }
17    }
18 }  Receive AHAH Request 
 1 function ahahDone(target) {
 2    // only if req is "loaded"
 3    if (req.readyState == 4) {
 4        // only if "OK"
 5        if (req.status == 200 || req.status == 304) {
 6            results = req.responseText;
 7            document.getElementById(target).innerHTML = results;
 8        } else {
 9            document.getElementById(target).innerHTML="ahah error:\n" +
10                req.statusText;
11        }
12    }
13 }
Executing Javascript 
由于浏览器在插入HTML的时候并不会执行<script>标签中的代码,所以你可以利用下面的方法来解决 document.getElementById(target): 
 1 var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
 2 var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
 3 var bMoz = (navigator.appName == 'Netscape');
 4 function execJS(node) {
 5   var st = node.getElementsByTagName('SCRIPT');
 6   var strExec;
 7   for(var i=0;i<st.length; i++) {     
 8     if (bSaf) {
 9       strExec = st[i].innerHTML;
10     }
11     else if (bOpera) {
12       strExec = st[i].text;
13     }
14     else if (bMoz) {
15       strExec = st[i].textContent;
16     }
17     else {
18       strExec = st[i].text;
19     }
20     try {
21       eval(strExec);
22     } catch(e) {
23       alert(e);
24     }
25   }
26 }
27 
注意:
1.由于IE返回的tag标志都是大写,所以你必须搜索SCRIPT而不是script.在firefox中也保留大写的形式.
2.不要用//的注释方式,用/**/的方式来代替,在每一个声明句后面加';'
(未完..)