zhyiwww
          用平實的筆,記錄編程路上的點點滴滴………
          posts - 536,comments - 394,trackbacks - 0

          AJAX 中從遠程 URL 動態取得 xml 的方法

          需求:

          JavaScript中動態的從一個URL取得xml文件,然后,動態的更新數據。

          問題的難點:

          Javascript 不能實現從一個URL讀取xml數據。

          使用動態的參數的時候,如后使用GET方法,那么,參數有可能太長。

          解決的辦法:

          這個辦法使用AJAX可以實現。

          因為AJAX可以從URL來動態的讀取xml數據。

          同時也可以很方便的分析和處理XML數據。

          問題的關鍵點:

          AJAX 不能從一個不同Context的服務器上來讀入XML,所以要想讀取xml數據的話,那就一定要在同一個Context中,如果不在,那么就使用一個Servlet來實現從一個遠程的URL上讀取數據,然后可以通過調用此Servlet來取得遠程的數據。

          我的實現:

          ?

          ? 寫一個Servlet來實現從遠程url上讀取xml數據,這個url參數是用戶根據自己的需要傳遞的。

          ??? public void doGet(HttpServletRequest request, HttpServletResponse response)

          ??????????? throws ServletException, IOException {

          ??????? System.out.println(" --------------? Get ----------------? ");

          ??????? response.setContentType("text/xml");

          ??????? response.setCharacterEncoding("UTF-8");

          ??????? //????? PrintWriter out = response.getWriter();

          ??????? //doPost(request,response);

          ???????

          ??????? String url = request.getParameter("url");

          ??????? //out.println(url);

          ??????? //String url = "";

          ??????? System.out.println("url is :? " + url);

          ???????

          ??????? //response.setContentType("text/xml");

          ???????

          ??????? PrintWriter out = response.getWriter();

          ???????????

          ??????? BufferedReader reader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));

          ???????

          ??????? StringBuffer xmlData = new StringBuffer();

          ??????? String tmp = "";

          ???????

          ??????? while((tmp = reader.readLine())!=null){

          ??????????? log.info(tmp);

          ??????????? out.print(tmp);

          ??????????? //System.out.println(" tmp :? " + tmp);

          ??????????? xmlData.append(tmp);

          ??????? }

          ???????

          ???????

          ??????? try {

          ??????????? out.println(XMLUtil.format(xmlData.toString()));

          ??????? } catch (DocumentException e) {

          ??????????? // TODO Auto-generated catch block

          ??????????? e.printStackTrace();

          ??????? }

          ??????? reader.close();

          ???????

          ??? }

          ? ?? AJAX來調用servlet取得此數據

          ?????? < script type = "text/javascript" >

          ?

          ?????????? var xmlHttp= new ActiveXObject( "Msxml2.XMLHTTP" );

          ?????????? //alert(xmlHttp);???

          ?????????? 這個 url 是你的 servlet uri, 只能是在同一個 context 內的,否則不能調用。所以,如果需要跨服務器的話,或者需要跨 context 的話,就需要使用在本 context 上使用一個 servlet 做跳轉。

          ?????????? var sevUrl = "../servlet/PullXmlData?url=" ;

          ?????????? ?

          ?????????? 下面的那個 url 參數其實是我們的遠程的 xml 的數據的 url, 因為在參數里面有等號,所以在調用之前就要通過一個處理和轉換,這一步也是必須的。

          ?????????? var url = sevUrl + encodeURIComponent( "http://192.168.1.50:8080/remoteServer /XmlInvoke?aaa=aaa&bbb=bbb " );????

          ???

          ?????????? alert( "url :? " + url);?????

          ???

          ?????????? xmlHttp.open( "post" , url , false );

          ?????????? xmlHttp.onreadystatechange= function () {?????????????

          ????????????? if (xmlHttp.readyState==4) {

          ????????????? ? ? alert(xmlHttp.responseText);

          ????????????? ?? document.write(xmlHttp.responseText);

          ????????????? }

          ?????????? }

          ?????????? xmlHttp.send();????? ??????

          ?????? </ script >

          ??????

          ?????? 我也剛接觸 Ajax, 所以也只能想到這個解決方案,如果大家有好的解決辦法,還請多多指教。



          |----------------------------------------------------------------------------------------|
                                     版權聲明  版權所有 @zhyiwww
                      引用請注明來源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2007-05-14 16:28 zhyiwww 閱讀(3257) 評論(3)  編輯  收藏 所屬分類: javascript

          FeedBack:
          # re: AJAX中從遠程URL動態取得xml的方法
          2007-05-14 17:36 | ltw
          可以啊 是這么做的  回復  更多評論
            
          # re: AJAX中從遠程URL動態取得xml的方法
          2007-05-14 17:38 | ltw
          不過 為什么返回信息不用responseXML直接好解析呢  回復  更多評論
            
          # re: AJAX中從遠程URL動態取得xml的方法
          2007-05-14 19:05 | TiGERTiAN
          一般就是這樣調用的,叫做Proxy  回復  更多評論
            
          主站蜘蛛池模板: 梧州市| 海口市| 惠东县| 阿荣旗| 福清市| 无为县| 老河口市| 宝坻区| 鹤岗市| 洪江市| 商洛市| 专栏| 买车| 清水河县| 黄浦区| 安图县| 青铜峡市| 招远市| 南汇区| 和静县| 辰溪县| 大同市| 镇安县| 阜阳市| 运城市| 电白县| 松江区| 大理市| 海门市| 慈利县| 唐海县| 漳州市| 汕头市| 甘孜| 霞浦县| 丰顺县| 德格县| 宁河县| 贺州市| 惠东县| 都江堰市|