一路拾遺
          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!");
              }

          二、服務(wù)器端Servlet 

                  這是doGet方法,即將參數(shù)寫在調(diào)用串中。

          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);
              }

          三、頁面發(fā)送請求

                  這里調(diào)用的Servlet的Get調(diào)用,即調(diào)用doGet方法。這種方式適合于參數(shù)是簡單數(shù)據(jù),這樣可以把參數(shù)卸載調(diào)用url中。
                  對于參數(shù)是復(fù)雜的數(shù)據(jù)對象時,應(yīng)該調(diào)用doPost方法,即在調(diào)用串中不包含調(diào)用參數(shù),而是把調(diào)用參數(shù)寫在request.send(參數(shù)對象)中,doGet調(diào)用時此處為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);
                  }

              }

          四、回調(diào)函數(shù)

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

                  }

              }

          五、解析返回XML、操作Dom以實現(xiàn)頁面動態(tài)變化

           //解析返回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)  編輯  收藏

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 武山县| 五原县| 定边县| 鄱阳县| 兴城市| 营山县| 闽清县| 简阳市| 镇原县| 治多县| 南皮县| 寿阳县| 二手房| 清苑县| 故城县| 彝良县| 兴仁县| 当雄县| 霍山县| 民和| 县级市| 定襄县| 利津县| 达拉特旗| 庄浪县| 天峨县| 敦化市| 金塔县| 乌鲁木齐市| 绥德县| 高平市| 瓦房店市| 桓台县| 黄陵县| 镇坪县| 江孜县| 永兴县| 凯里市| 含山县| 龙口市| 昌江|