隨筆-55  評論-208  文章-0  trackbacks-0
          今天開始試用ajax最為項目的輔助,本來開始很順利,測試的內容也比較簡單
          先在一個jsp中加入ajax的引擎
          //ajax?引擎
          ????<script language="javascript">
          ????var?http_request?
          =?false;
          ????var?currentPos?
          =?null;
          ????function?send_request(url)?
          {//初始化、指定處理函數、發送請求的函數
          ????????http_request?=?false;
          ????????
          //開始初始化XMLHttpRequest對象
          ????????if(window.XMLHttpRequest)?{?//Mozilla?瀏覽器
          ????????????http_request?=?new?XMLHttpRequest();
          ????????????
          if?(http_request.overrideMimeType)?{//設置MiME類別
          ????????????????http_request.overrideMimeType('text/xml');
          ????????????}

          ????????}

          ????????
          else?if?(window.ActiveXObject)?{?//?IE瀏覽器
          ????????????try?{
          ????????????????http_request?
          =?new?ActiveXObject("Msxml2.XMLHTTP");
          ????????????}
          ?catch?(e)?{
          ????????????????
          try?{
          ????????????????????http_request?
          =?new?ActiveXObject("Microsoft.XMLHTTP");
          ????????????????}
          ?catch?(e)?{}
          ????????????}

          ????????}

          ????????
          if?(!http_request)?{?//?異常,創建對象實例失敗
          ????????????window.alert("不能創建XMLHttpRequest對象實例.");
          ????????????
          return?false;
          ????????}

          ????????
          ????????http_request.onreadystatechange?
          =?processRequest;
          ????????
          //?確定發送請求的方式和URL以及是否同步執行下段代碼
          ????????
          ????????http_request.open(
          "POST",?url,?true);
          ????????http_request.setRequestHeader(
          "Content-Type","application/x-www-form-urlencoded");
          ????????????
          ????????http_request.send(
          null);
          ????}

          ????
          //?處理返回信息的函數
          ????function?processRequest()?{
          ????????
          if?(http_request.readyState?==?4)?{?//?判斷對象狀態
          ?????????????
          ????????????
          if?(http_request.status?==?200)?{?//?信息已經成功返回,開始處理信息
          ????????????????
          ????????????????????????????????
          ????????????????document.getElementById(currentPos).innerHTML?
          =?http_request.responseText;
          ????????????}
          ?else?{?//頁面不正常
          ????????????????alert("http_request.status?exception?code:"+http_request.status);
          ????????????}

          ????????}

          ????}
          </script>

          然后在jsp中做個測試的select,和用于顯示ajax的回傳數據的區域
          <table?width="200"?border="0"?cellspacing="0"?cellpadding="0">
          ????
          <tr>
          ????????
          <td?height="20"><select?name="ajaxtest"?size="1"?onchange="showRoles('test1');">
          ????????
          <option?selected="selected"?value="test1"?>test1</option>
          ????????
          <option?value="test2"?>test2</option>
          ????????
          <option?value="test3"?>test3</option>
          ????????
          <option?value="test4"?>test4</option>
          ????????
          </select></td>
          ????
          </tr>
          ????
          <tr?style="display:none">
          ????????
          <td?height="20"?id="test1">&nbsp;</td>
          ????
          </tr>
          ?</table>
          再寫一個js用了作為事件的觸發
          <script?language="javascript">
          ????????
          ????
          //顯示部門下的崗位
          ????function?showRoles(obj)?{
          ????????document.getElementById(obj).parentNode.style.display?
          =?"";
          ????????document.getElementById(obj).innerHTML?
          =?"loading"
          ????????currentPos?
          =?obj;
          ????????
          ????????send_request(
          "http://localhost/oa-web/app/test/sample2_2.jsp?playPos="+obj);
          ????}
          </script>
          ?再另外寫一個資源jsp,用于讀取資源回來

          <%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%>
          <meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8">
          <%?
          String?playPos?
          =?request.getParameter("playPos");
          if("test1".equals(playPos))?out.print("&nbsp;&nbsp;總經理皮總<br>&nbsp;&nbsp;副總經理老皮");
          else?if("test2".equals(playPos))?out.println("&nbsp;&nbsp;總工程師<br>&nbsp;&nbsp;軟件工程師");
          else?if("test3".equals(playPos))?out.println("&nbsp;&nbsp;總工程師張青與<br>&nbsp;&nbsp;軟件工程師味蕾");
          else?if("test4".equals(playPos))?out.println("&nbsp;&nbsp;總工程師張遲斌<br>&nbsp;&nbsp;軟件工程師章魚");
          %>
          兩個jsp的編碼都是utf-8的,但是在測試時發現回傳回來的responseText都是亂碼
          去google上找,原來http_request?這個對象在request和response都是以gb2312進行的,需要更改編碼
          但是可惡的是javascript沒有提供更改http_request?編碼的方法于是在網上找了一個vbscript的函數
          <SCRIPT?LANGUAGE="vbScript">?
          ?Function?URLEncoding(vstrIn)?
          ?strReturn?
          =?""?
          ?For?i?
          =?1?To?Len(vstrIn)
          ?ThisChr?
          =?Mid(vStrIn,i,1)
          ?If?Abs(Asc(ThisChr))?
          <?&HFF?Then
          ?strReturn?
          =?strReturn?&?ThisChr?
          ?Else?
          ?innerCode?
          =?Asc(ThisChr)
          ?If?innerCode?
          <?0?Then?
          ?innerCode?
          =?innerCode?+?&H10000
          ?End?If?
          ?Hight8?
          =?(innerCode?And?&HFF00)\?&HFF?
          ?Low8?
          =?innerCode?And?&HFF?
          ?strReturn?
          =?strReturn?&?"%"?&?Hex(Hight8)?&?"%"?&?Hex(Low8)
          ?End?If
          ?Next?
          ?URLEncoding?
          =?strReturn
          ?End?Function?
          </SCRIPT>?
          然后對回傳回來的http_request?進行一下編碼更改
          ????//?處理返回信息的函數
          ????function?processRequest()?{
          ????????
          if?(http_request.readyState?==?4)?{?//?判斷對象狀態
          ?????????????
          ????????????
          if?(http_request.status?==?200)?{?//?信息已經成功返回,開始處理信息
          ????????????????
          ????????????????URLEncoding(http_request.responseBody);
          ????????????????
          ????????????????document.getElementById(currentPos).innerHTML?
          =?http_request.responseText;
          ????????????}
          ?else?{?//頁面不正常
          ????????????????alert("http_request.status?exception?code:"+http_request.status);
          ????????????}

          ????????}

          ????}
          最終終于可以正常顯示中文了
          這兩天和編碼的糾纏有一個深刻的體會:做中國人難啊,要是計算機是中國人發明的多好:)
          注:這種方法只在IE上試驗過,別的瀏覽器還沒有試
          posted on 2006-04-13 20:14 rocket 閱讀(1484) 評論(0)  編輯  收藏

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


          網站導航:
           
          主站蜘蛛池模板: 凤阳县| 得荣县| 英超| 缙云县| 阳泉市| 凌云县| 安达市| 邹平县| 华宁县| 苗栗市| 如皋市| 云梦县| 夏津县| 万年县| 齐河县| 于都县| 石狮市| 芦溪县| 宜城市| 成武县| 灯塔市| 永嘉县| 临城县| 清水县| 监利县| 鱼台县| 云和县| 华坪县| 铅山县| 谢通门县| 黄梅县| 湖口县| 六盘水市| 孟州市| 镇安县| 延庆县| 荣成市| 烟台市| 湖北省| 永胜县| 墨竹工卡县|