其實很長時間我都是在用第三方庫,比如jquery ,prototype.js ,ext.js 關注過我blog的朋友不難發現我不喜歡造輪子,有現成的就用現成的。但是如今那些庫都變得很龐大。 雖然jquery 的庫,所提供的功能非常實用,基本也感覺沒啥冗余。 不過一般一個web 頁面基本都用不了,那么4、5000行的庫,有人就為了用個ajax 跑去使用ext 。。。。其實我們不妨把自己所需要的一些js 公共函數 封裝成比較獨立的腳本。這樣能省掉不少流量,況且 關于GPL 的開源協議,也能將部分用戶拒之門外的,必定這是一個商業社會。

              試看淘寶,網易,騰訊,搜狐…… 別人都有自己的腳本庫。我也想過在金山做那么一個腳本庫,連怎么把這么多腳本小庫,組織起來,怎么提供一個內部的腳本服務器,比如就像google 的,開發都按需申請加載 這些我都想好了。本人JavaScript 腳本也基本差不多達到了,然而,聽說是更有價值的事情等著我了……

          ajax.js:

          /**
           * @author  hechangmin@gmail.com
           * @brief   封裝 ajax 接口
           
          */ 
           
          var Ajax = 

              
          /**
               * @brief 創建XMLHTTP 對象
               
          */
              _creatXmlHttp : 
          function()
              {
                  
                  
          if(window.XMLHttpRequest) 
                  { 
                      
          return new XMLHttpRequest();
                  }
                  
          else if(window.ActiveXObject)   
                  { 
                      
          var aVersions = ['MSXML2.XMLHTTP.6.0','MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];   
                      
                      
          for(var i=0; i<aVersions.length; i++)
                      { 
                          
          try 
                          {
                              
          return new ActiveXObject(aVersions[i]);
                          }
          catch(e)
                          { 
                          }
                      }   
                  }
              },
              
              
          /**
               * @brief 發送請求,以及綁定回調函數
               * @param {Object} option [可選]
               * {
               *         [method],[async],url,data,[success],[encode],[error]
               * }
               
          */
              sendRequest : 
          function(_option)
              { 
                  
          var xmlhttp = Ajax._creatXmlHttp();
                  
          var option  = _option;
                  
                  
          if(!xmlhttp)
                  { 
                      alert(
          "Your browser against Ajax.");
                      
          return false;
                  }
                  
                  Ajax._CheckParam(option);
                  
                  xmlhttp.open(option.method, option.url, option.async);
                  
                  xmlhttp.setRequestHeader('Content
          -type','application/x-www-form-urlencoded; charset=+ option.encode);
                  
                  xmlhttp.onreadystatechange 
          = Ajax._BindCallBack(xmlhttp,option);
                  
                  xmlhttp.send(option.data 
          || null);
                  
                  
          return xmlhttp;
              },
              
              
          /**
               * @brief 綁定回調
               
          */
              _BindCallBack : 
          function(xmlhttp,option)
              { 
                  
          return function()
                  { 
                      
          if (xmlhttp.readyState == 4
                      { 
                          
          if (xmlhttp.status >= 200 && xmlhttp.status < 300 ) 
                          {
                              
          if(option.success != null)
                              {
                                  option.success(xmlhttp.responseText);
                                  
          delete xmlhttp;
                                  xmlhttp 
          = null
                              }
                          }
          else
                          {
                              
          if(option.error  != null)
                              {
                                  option.error(xmlhttp.responseText);
                                  
          delete xmlhttp;
                                  xmlhttp 
          = null;
                              }
                          } 
                      }
                  }
              },
              
              
          /**
               * @brief 參數校驗 補齊默認值
               * @param {Object} option
               
          */
              _CheckParam : 
          function(option)
              { 
                   
                  
          if(!option.method)
                  { 
                      option.method 
          = "post";
                      
                  }
          else if(option.method.toLowerCase() === "get")
                  { 
                      option.method 
          = "get";
                  }
          else
                  { 
                      option.method 
          = "post";
                  }
                   
                  
          if(option.async === window.undefined)
                  { 
                      option.async 
          = true;
                  }
                  
                  
          if(!option.url)
                  { 
                      option.url 
          = window.location.href;
                  }
                  
                  
          if(!option.encode)
                  { 
                      option.encode 
          = "UTF-8";    
                  }
                  
                  
          if (option.method == 'get' && typeof(option.data) == 'string')
                  {
                      option.url 
          += (option.url.indexOf('?') == -1 ? '?' : '&') + "data=" + option.data;
                      
                      option.data 
          = null;
                  }
                  
                  
          if(option.method == 'post')
                  { 
                      option.data 
          = "data=" + option.data;
                  }
                  
              }


          test.html

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <html>
              
          <head>
                  
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
                  
          <script type="text/javascript" src="public/js/ajax.js"></script>
                  
          <script type="text/javascript" src="public/js/json2.js"></script>
              
          </head>
              
          <body>
                  
          <div id="test1">aaaa</div>
                  
          <script type="text/javascript" defer="true">
                      
          var param = { 
                              method : 
          "get",
                              async  : 
          true,
                              url    : 
          "test.php",
                              data   : 
          "testtest",
                              success: 
          function(txt)
                              { 
                                  alert(txt); 
                              },
                              
                              encode : 
          "UTF-8",
                              
                              onerror : 
          function(txt)
                              { 
                                  alert(txt);
                              }
                              
                      };
                      
                      
          var x = JSON.stringify(param);
                      
                      alert(x);
                      
                      alert(
          typeof x );
                      
                      
          var y = JSON.parse(x);
                      
                      alert(
          typeof y);
                      
                      
          for(var i in y)
                      { 
                          alert(
          "y." + i + ":" + y[i]);
                      }
                      
                      
          //alert(param);
                      
                      Ajax.sendRequest(param);
                      
                      
          var param1 = { 
                              url    : 
          "test.php",
                              async  : 
          false,
                              data   : 
          "aaaaa"                
                      };
                      
                      
          var ret = Ajax.sendRequest(param1).responseText;
                      
                      alert(ret);
                  
          </script>
              
          </body>
          </html>

          關于解析JSON 的部分:

           http://www.JSON.org/json2.js

           http://www.JSON.org/js.html


          posted on 2010-03-23 23:05 -274°C 閱讀(2562) 評論(0)  編輯  收藏 所屬分類: web前端

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914173
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 台东市| 景洪市| 丰顺县| 瓮安县| 玉田县| 内江市| 大同县| 益阳市| 芷江| 松溪县| 灌阳县| 和顺县| 繁昌县| 新兴县| 布拖县| 东乌珠穆沁旗| 温泉县| 玉龙| 六盘水市| 调兵山市| 珲春市| 海城市| 鲁山县| 临海市| 舒城县| 峡江县| 南京市| 四子王旗| 榆树市| 和静县| 修水县| 丹东市| 德保县| 姜堰市| 灵台县| 阿拉善盟| 南平市| 丘北县| 娄烦县| 昌图县| 新密市|