Vincent Thinking

          All about Vincent's work and life

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            34 隨筆 :: 0 文章 :: 183 評論 :: 0 Trackbacks

          什么是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.不要用//的注釋方式,用/**/的方式來代替,在每一個聲明句后面加';'

          (未完..)
          posted on 2006-01-09 09:31 Vincent Thinking 閱讀(71745) 評論(2)  編輯  收藏 所屬分類: Work

          評論

          # re: AHAH 介紹 2006-02-09 20:43 charon~
          兄弟,你這個用innerHTML載入javascript代碼是工作不了的.
          在ie下面,如果innerHTML = xxx,并且xxx中包含script標簽的話,在設置的時候都會被丟棄,此時再用getElementById取回Node,其node.getElementsByTagName('SCRIPT');是空。
          而且,這片文章是翻譯的吧  回復  更多評論
            

          # re: AHAH 介紹 2006-02-10 09:57 Vincent Thinking
          Hi charon:

          腳本確實被插入到了 innerHTML 中,可以 alert 一下看看。但是會有一種例外情況存在,那就是如果腳本在 innerHTML 內容開頭的話,那么 IE 瀏覽器將會忽略掉這段腳本,而 Moziila/Firefox 和 Opera 卻不會。

          所以你可以在插入的腳本前加入一段內容:
          <span style="display: none">hack ie</span>
          這樣腳本就不會被忽略了。 當然,如果你不是IE的話,完全沒有必要插入這段代碼。

          PS:這是翻譯的 ^_^,只是一篇介紹,沒有實踐過,有興趣的話,可以試一下  回復  更多評論
            

          主站蜘蛛池模板: 彩票| 莱芜市| 太康县| 武汉市| 洮南市| 潮州市| 隆林| 团风县| 科尔| 吐鲁番市| 哈密市| 安康市| 常山县| 江陵县| 万安县| 邯郸县| 酒泉市| 富顺县| 望江县| 沿河| 全椒县| 读书| 罗山县| 墨玉县| 宜昌市| 长宁县| 肇源县| 浦县| 疏勒县| 虎林市| 凤台县| 英山县| 平武县| 台山市| 定西市| 沾益县| 冕宁县| 云梦县| 徐汇区| 太谷县| 永胜县|