JAVA

          人生若只如初見,何事秋風悲畫扇。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            50 隨筆 :: 25 文章 :: 157 評論 :: 0 Trackbacks

          用ajax有段時間了總結一下:

          用xmlhttp去server取數據的時候,有如下二種方法
          1:在server端通過response向流里寫數據

          private void sendMsg2Stream(HttpServletResponse response,String message){
            
          try{
             response.setHeader(
          "charset""gb2312");
             response.setHeader(
          "Cache-Control""no-cache");
             response.setHeader(
          "Pragma""no-cache");
             response.setContentType(
          "text/xml");
             response.getOutputStream().write(StringUtil.getUTF8Bytes(message));
            }
          catch(Exception e){
             e.printStackTrace();
            }

           }


           
           StringUtil.getUTF8Bytes是自寫的一個類,因為xmlhttp中傳數據的時候默認是UTF-8傳的。
           這樣可以防止亂碼出現。
           
           在客戶端JS中:

            function finishedAction(originalRequest){
              var res 
          = originalRequest.responseText;//當然也可以返回xml
              $('dbrglqx').innerHTML = res;
           }

           
          在server中假如返回一些字符串這樣很方便,但如何想動態組合成一些list的option時,可能不太方便了,
          這時可以通過JS的eval方法直接取一個頁面內容。具體如下:
          在server中返回的是一個頁面,如在spring MVC中可能如下:
          return new ModelAndView("redirect:data.html");
          在返回前主可以做一些別的手術,典型的如request.setAttribute(name,value);
          然后在JSP中進行解剖,如JSP中(這種情況下,把它當時在js文件就OK了):

          <%
            response.setHeader(
          "Pragma""No-cache");
            response.setHeader(
          "Cache-Control""no-cache");
            response.setDateHeader(
          "Expires"0);
          %>

          var targetOrgObj
          =document.myForm.targetOrgId;
          var optionsCount
          =targetOrgObj.options.length;
          for (var i=optionsCount-1; i>0; i--){
           targetOrgObj.options[i]
          =null;
          }

          <c:forEach var="varValue" items="${values}">
           var oOption
          =document.createElement("option");
           oOption.text
          ="<c:out value="${varValue.orgName}" />";
           oOption.value
          ="<c:out value="${varValue.orgId}"/>";
             
          <c:if test="${id==6}">
            
          <c:if test="${varValue.departmentCode == currentMeterRd}"> 
             oOption.selected
          =true;
           

           

          myForm的定義要弄清楚,它應該在你所(發送)請求的頁面的document里的對象

          JS中(沒什么好想的)

          function showResponse(originalRequest){
            eval(originalRequest.responseText);
          }

           

           
          其它:
          以上都是通過xmlhttp來用AJAX的,這樣可以通過參數直接控制同步還是異步。

          var dbgl = new Ajax.Request(
            uri, 
            
          {
             method: 
          'get',
             parameters: 
          'method=getYearFhqx&userId='+userId+'&timeStamp='+new Date().getTime(),
             asynchronous: 
          true,
             onComplete: showResponse
            }
          ); 

            
          最近用DWR用感覺不錯,挺好的!它的util中還提供了不少的有用 & 常用的方法。不過一直不知道DWR中如何同步傳輸,今天找到了:
          在DWR的engine.js文件,有setAsync方法,就是設置調用是否是同步的,還是異步的。

          js 代碼
           

          DWREngine.setAsync(false);  
             
          DWREngine.setAsync(
          true);

           

           

          posted on 2007-04-11 13:53 Jkallen 閱讀(1099) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 宜阳县| 德惠市| 得荣县| 梁河县| 玉林市| 吉木萨尔县| 中宁县| 景德镇市| 敦煌市| 巴东县| 手机| 茶陵县| 宁陕县| 弥渡县| 拜城县| 仪征市| 丁青县| 泰兴市| 天柱县| 江阴市| 家居| 枝江市| 永新县| 安阳市| 扶风县| 大英县| 靖州| 鄂州市| 道真| 平凉市| 定日县| 独山县| 桐庐县| 九江县| 金溪县| 盘山县| 平乐县| 平山县| 比如县| 旺苍县| 和硕县|