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  回復  更多評論
            
          主站蜘蛛池模板: 云梦县| 西乌| 封开县| 慈利县| 金川县| 灌阳县| 江阴市| 丘北县| 榆林市| 梁山县| 嵊州市| 安陆市| 日喀则市| 达日县| 桦甸市| 新建县| 敦化市| 洛阳市| 建宁县| 陵川县| 昔阳县| 新宾| 涪陵区| 赣榆县| 通渭县| 全州县| 启东市| 建水县| 姜堰市| 陇南市| 武汉市| 康平县| 怀集县| 根河市| 柳江县| 长宁县| 石泉县| 库车县| 西藏| 九龙城区| 明水县|