什么是AHAH?
AHAH:(Asychronous HTML and HTTP)
单来_AHAH是一U利用JavaScript动态更新web面的技?他通过XMLHTTPRequest来获得动态的htmlQ填充到 web面中?/P>
和AJAX的关p?
AHAH被认为是一U比AJAX(Asynchronous JavaScript and XML)更简单的web开发方?严格意义上来说AHAH是AJAX的一个子?因ؓ(X)HTML本n及时一个特DŞ式的XMLQ但是最为子集的AHAH却有Ҏ的和有用的特?
1.无需定义XML schemas可以使设计时间大q减?/P>
2.使用已有的HTML面从而避免必L供特D的Web服务
3.所有的数据通过览器可识别的HTML传输Q从而可以很Ҏ的调试和试
4.HTML直接包含在页面的DOM对象中,无需解析
5.HTML设计者可以用CSS来格式化昄Q无需E序员用XSLT转换
6.所有的处理都在服务器端完成Q客L不需要编写Q何程?/P>
实事上,M内容的最l都是要转化成浏览器可识别结果,展现在浏览器上。很难想象出转化成自定义的XML格式比HTML有什么优?BR>
参?A >ahah.js ?nbsp;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.׃IEq回的tag标志都是大写,所以你必须搜烦SCRIPT而不是script.在firefox中也保留大写的Ş?
2.不要?/的注释方??**/的方式来代替,在每一个声明句后面?;'
(未完..)
]]>