捌零肆玖◎潑猴

          統計

          留言簿(1)

          閱讀排行榜

          評論排行榜

          [AJAX筆記]XMLHttpRequest

          摘要:AJAX實際上由4種技術構成:JavaScript、CSS、DOM、XMLHttpRequest 前三種技術都是傳統web應用中常用的技術,只有XMLHttpRequst在傳統web中的應用不是很多,所以就來對XMLHttpRequst做個了解

          首先XMLHttpRequest不是web標準,而是大部分主流瀏覽器都支持的一種擴展技術。它被認為是一種異步調用的實現技術,因為它本來是被設計在后臺取數據用的。在IE中它被作為一個ActiveX控件提供,而其他一些瀏覽器都提供一些本地API以供調用。
          下面是一些關于XMLHttpRequest的基本方法:

          1、獲取得一個XMLHttpRequest對象:

          function getXMLHttpRequest() {
            
          var xRequest = null;
            
          if (window.XMLHttpRequest) {
              xRequest 
          = new XMLHttpRequest();
            }
           else if (typeof ActiveObject !=  "undefined"{
              xRequest 
          = new ActiveXObject("Microsoft.XMLHTTP");
            }

            
          return xRequest;
          }

          2、向服務器發送XMLHttpRequest:

          function sendRequest(url, params, HttpMethod) {
            
          if (!HttpMethod){
              HttpMethod 
          = "POST";
            }

            
          var req = getXMLHttpRequest();
            
          if (req) {
              req.open(HttpMethod, url, 
          true);
              req.setRequestHeader(
          "Content-Type""application/x-www-form-urlencoded");
              req.send(params);
            }

          }

          3、使用回調方法來監測XMLHttpRequest對象的狀態
          XMLHttpRequest使用屬性readyState來表示它的狀態
            0 = 未初始化
            1 = 讀取中
            2 = 已讀取
            3 = 交互中
            4 = 完成
          在事件驅動開發中我們經常使用回調技術,比如UI設計中的對按鍵的響應等等。我們可以使用對XMLHttpRequest對象的onreadystatechange屬性來設置監視XMLHttpRequest對象的狀態的回調方法:

          function sendRequest(url, params, HttpMethod) {
            
          if (!HttpMethod){
              HttpMethod 
          = "POST";  
            }
            
            
          var req = getXMLHttpRequest();
            
          if (req) {
              req.onreadystatechange 
          = onReadStateChage;
              req.open(HttpMethod, url, 
          true);    
              req.setRequestHeader(
          "Content-Type""application/x-www-form-urlencoded");    
              req.send(params);  
            }

          }


          function onReadyStateChange()
            
          //
          }


          4、完整的例子

          <html>
            
          <head>
            
          <script language="JavaScript">
              
          var req = null;
              
          var infos = new Array("init""loading""loaded""running""finished");
              
          var console = null;
              
              
          function initXMLHttpRequest() {
                
          if (req == null{
                  
          if (window.XMLHttpRequest) {
                    req 
          = new XMLHttpRequest();
                  }

                  
          else if (typeof ActiveObject !=  "undefined"{
                    req 
          = new ActiveXObject("Microsoft.XMLHTTP");    
                  }
            
                }

              }

              
              
          function sendRequest(url) {
                
          if (req == null{
                  initXMLHttpRequest();  
                }
           
                
                
          if (req) {
                  req.onreadystatechange 
          = onReadyStateChange;
                  req.open(
          "GET", url, true);
                  req.setRequestHeader(
          "Content-Type""application/x-www-form-urlencoded");
                  req.send(
          null);  
                }

              }

              
              
          function onReadyStateChange(){  
                
          if (console == null{
                  console 
          = document.getElementById('console');  
                }

                
                
          var state = req.readyState;
                
          var txt;  
                
          if (state == 4{
                  
          if (!req.status == 200{
                    txt 
          = "response:" + req.status;    
                  }
           else {
                    txt 
          = "response:" + req.responseText;
                  }
            
                }
           else {    
                  txt 
          = infos[state];  
                }

                
                
          var newline = document.createElement("div");
                newline.appendChild(document.createTextNode(txt));  
                console.appendChild(newline); 
              }

            
          </script>
            
          </head>
            
          <body>
              
          <div id="console"></div>
              
          <input type="button" onClick="sendRequest('ajax_test.txt')" value="Send Request"/>
            
          </body>
          </html>


          將上面的代碼保存為ajax_text.html文檔中,然后在同一路徑放一個ajax_test.txt,在這個文本文件寫下一行文字,用瀏覽器打開 ajax_text.html,點擊"Send Request"看看發生了什么?
          BTW 我只在Firefox中測試過,因為我用的是Linux

          學習參考資料:
          《AJAX in Action》
          AJAX開發簡略
          AJAX開發簡略續一

          posted on 2005-11-23 09:40 Max Wang 閱讀(1352) 評論(6)  編輯  收藏 所屬分類: Web技術

          評論

          # re: [AJAX筆記]XMLHttpRequest 2005-11-24 09:21 emu

          >>只有XMLHttpRequst是傳統web應用中不曾使用過得
          其實也是個很傳統的技術了。  回復  更多評論   

          # re: [AJAX筆記]XMLHttpRequest 2005-11-24 22:07 Max Wang

          呵呵,謝了,趕快改過了,不要誤導了大家  回復  更多評論   

          # re: [AJAX筆記]XMLHttpRequest 2005-11-24 22:31 Max Wang

          格式亂了,等回公司在windows下面再調吧,firefox下面好像是不行阿!  回復  更多評論   

          # re: [AJAX筆記]XMLHttpRequest 2005-11-25 09:49 chenhua

          windows下好像不行嗎  回復  更多評論   

          # re: [AJAX筆記]XMLHttpRequest 2005-11-25 09:57 Max Wang

          家里用的是Linux,公司才有Windows  回復  更多評論   

          # re: [AJAX筆記]XMLHttpRequest 2005-12-17 11:00 blue1018

          function initXMLHttpRequest() {
          if (req == null) {
          if (window.XMLHttpRequest) {
          req = new XMLHttpRequest();
          }
          else if (typeof ActiveObject != "undefined") {
          req = new ActiveXObject("Microsoft.XMLHTTP");
          }
          }
          }


          這個函數在wxp ie6 下不能正確的執行  回復  更多評論   


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 遂平县| 游戏| 孟村| 宜丰县| 洪泽县| 治多县| 邵阳县| 渭南市| 呼玛县| 沈丘县| 晋中市| 神农架林区| 延吉市| 永川市| 青神县| 赫章县| 玛沁县| 桃园县| 西贡区| 迁西县| 凌源市| 石林| 海晏县| 江安县| 鲁山县| 文成县| 民乐县| 仁布县| 慈利县| 奈曼旗| 沙湾县| 民县| 稷山县| 张掖市| 四川省| 镇宁| 静安区| 黄石市| 方山县| 彭泽县| 澄迈县|