一路拾遺
          Collect By Finding All The Way ......
          posts - 81,comments - 41,trackbacks - 0

          一、連接的建立

          <script type="text/javascript">
              
          var request;
              window.onload 
          = function()
              
          {
                  listApi();
              }

              
              
          function createRequest()
              
          {
                  
          try{
                      request 
          = new XMLHttpRequest();
                    }
          catch (trymicrosoft){
                      
          try{
                        request 
          = new ActiveXObject("Msxml2.XMLHTTP");
                      }
          catch (othermicrosoft){
                          
          try{
                            request 
          = new ActiveXObject("Microsoft.XMLHTTP");
                          }
           catch (failed) {
                            request 
          = false;
                          }

                      }

                    }

                  
          if(!request)
                      alert(
          "Error initializing XMLHttpRequest!");
              }

          二、服務器端Servlet 

                  這是doGet方法,即將參數寫在調用串中。

          public void doGet(HttpServletRequest request, HttpServletResponse response)
                      
          throws ServletException, IOException {


                  response.setContentType(
          "text/xml");
                  response.setHeader(
          "Cache-Control""no-cache");
                  request.setCharacterEncoding(
          "GBK");
                  response.setCharacterEncoding(
          "UTF-8");
                  
          int restMethodId = Integer.parseInt(request.getParameter("restMethodId"));

                  String xml_start 
          = "<methodDetail>";
                  String xml_end 
          = "</methodDetail>";
                  StringBuilder xml 
          = new StringBuilder();
                  
                  xml.append(xml_start);
                  
                  RestDao restDao 
          = new RestDao();
                  RestMethod restMethod 
          = restDao.getRestMethod(restMethodId);
                  
                  xml.append(
          "<name>");
                  xml.append(zhuanYi(restMethod.getRestMethodName()));
                  xml.append(
          "</name>");
                  
                  xml.append(xml_end);
                  
                  String xmlString 
          = xml.toString();
                  xmlString 
          = xmlString.replace("&nbsp;"" ");
                  xmlString 
          = xmlString.replace("&""&amp;");


                  response.getWriter().write(xmlString);
              }

          三、頁面發送請求

                  這里調用的Servlet的Get調用,即調用doGet方法。這種方式適合于參數是簡單數據,這樣可以把參數卸載調用url中。
                  對于參數是復雜的數據對象時,應該調用doPost方法,即在調用串中不包含調用參數,而是把調用參數寫在request.send(參數對象)中,doGet調用時此處為null。

          function getMethodDetail(methodId)
              
          {
                  
          var id = methodId.substr(6);
                  
          var url = "servlet/getMethodDetail?restMethodId=" + escape(id);
                  call(url);
              }

              
              
          function call(url)
              
          {
                  createRequest();

                  
          if(request){
                      request.open(
          "GET",url,true);
                      request.onreadystatechange 
          = callback;
                      request.send(
          null);
                  }

              }

          四、回調函數

           function callback(){
                  
          if(request.readyState ==4){
                      
          if(request.status ==200){
                          parseMessage();
                      }
          else{
                          alert(
          "不能得到方法信息:" + req.statusText);
                      }

                  }

              }

          五、解析返回XML、操作Dom以實現頁面動態變化

           //解析返回xml的方法
              function parseMessage()
              
          {
                  
          var xmlDoc = request.responseXML.documentElement;
                  
                  
          if(xmlDoc.nodeName == "apis")
                  
          {
                      updateApi(xmlDoc);
                  }

                  
          else if(xmlDoc.nodeName == "methods")
                  
          {
                      updateMethod(xmlDoc);
                  }

                  
          else if(xmlDoc.nodeName == "methodDetail")
                  
          {
                      updateMethodDetail(xmlDoc);
                  }

                   
          else
                  
          {
                      alert(
          "NO Api");
                  }

              }

              
              
          function updateApi(xmlDoc)
              
          {
                  
          var apis = xmlDoc.getElementsByTagName("api");
                  
          var apiul = document.getElementById("apiul");
                  equalCount(apis.length, apiul);
                  
                  
          var apiliArray = apiul.getElementsByTagName("li");
                  
                  
          for(var i=0; i<apiliArray.length; i++)
                  
          {
                      apiliArray[i].onclick 
          = function(){listMethod(this.id);}
                      
                      
          var apiId = apis[i].childNodes[0].firstChild.nodeValue;
                      apiliArray[i].id 
          = "api" + apiId;
                      
                      
          var apiName = apis[i].childNodes[1].firstChild.nodeValue;
                      
          var nameText=document.createTextNode(apiName);
                      
                      apiliArray[i].removeChild(apiliArray[i].childNodes[
          0]);
                      
                      apiliArray[i].appendChild(nameText);
                  }

              }

          posted on 2009-12-04 11:07 胖胖泡泡 閱讀(144) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 枣阳市| 昌吉市| 利川市| 德昌县| 行唐县| 台州市| 阳春市| 略阳县| 大方县| 宁陕县| 镇平县| 太和县| 兴安盟| 永平县| 高安市| 抚松县| 乌鲁木齐市| 邯郸县| 房产| 邵阳市| 饶河县| 临潭县| 鄂伦春自治旗| 堆龙德庆县| 益阳市| 金昌市| 张家界市| 兰州市| 松阳县| 通城县| 台中县| 广平县| 凉城县| 宁河县| 连南| 东乡| 乃东县| 铜鼓县| 涪陵区| 合肥市| 高碑店市|