zhyiwww
          用平實(shí)的筆,記錄編程路上的點(diǎn)點(diǎn)滴滴………
          posts - 536,comments - 394,trackbacks - 0
          <2007年5月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          -------------------------------------------
          崇尚原創(chuàng)精神,
          文章歡迎轉(zhuǎn)載,
          請(qǐng)您注明出處,
          在此特別聲明。
          版權(quán)所有@zhyiwww
          引用鏈接
          http://www.aygfsteel.com/zhyiwww

          --------------------------------------------

          常用鏈接

          留言簿(33)

          隨筆分類(626)

          朋友的博客

          最新隨筆

          搜索

          •  

          積分與排名

          • 積分 - 1557784
          • 排名 - 11

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          AJAX 中從遠(yuǎn)程 URL 動(dòng)態(tài)取得 xml 的方法

          需求:

          JavaScript中動(dòng)態(tài)的從一個(gè)URL取得xml文件,然后,動(dòng)態(tài)的更新數(shù)據(jù)。

          問(wèn)題的難點(diǎn):

          Javascript 不能實(shí)現(xiàn)從一個(gè)URL讀取xml數(shù)據(jù)。

          使用動(dòng)態(tài)的參數(shù)的時(shí)候,如后使用GET方法,那么,參數(shù)有可能太長(zhǎng)。

          解決的辦法:

          這個(gè)辦法使用AJAX可以實(shí)現(xiàn)。

          因?yàn)?span lang="EN-US">AJAX可以從URL來(lái)動(dòng)態(tài)的讀取xml數(shù)據(jù)。

          同時(shí)也可以很方便的分析和處理XML數(shù)據(jù)。

          問(wèn)題的關(guān)鍵點(diǎn):

          AJAX 不能從一個(gè)不同Context的服務(wù)器上來(lái)讀入XML,所以要想讀取xml數(shù)據(jù)的話,那就一定要在同一個(gè)Context中,如果不在,那么就使用一個(gè)Servlet來(lái)實(shí)現(xiàn)從一個(gè)遠(yuǎn)程的URL上讀取數(shù)據(jù),然后可以通過(guò)調(diào)用此Servlet來(lái)取得遠(yuǎn)程的數(shù)據(jù)。

          我的實(shí)現(xiàn):

          ?

          ? 寫一個(gè)Servlet來(lái)實(shí)現(xiàn)從遠(yuǎn)程url上讀取xml數(shù)據(jù),這個(gè)url參數(shù)是用戶根據(jù)自己的需要傳遞的。

          ??? 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來(lái)調(diào)用servlet取得此數(shù)據(jù)

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

          ?

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

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

          ?????????? 這個(gè) url 是你的 servlet uri, 只能是在同一個(gè) context 內(nèi)的,否則不能調(diào)用。所以,如果需要跨服務(wù)器的話,或者需要跨 context 的話,就需要使用在本 context 上使用一個(gè) servlet 做跳轉(zhuǎn)。

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

          ?????????? ?

          ?????????? 下面的那個(gè) url 參數(shù)其實(shí)是我們的遠(yuǎn)程的 xml 的數(shù)據(jù)的 url, 因?yàn)樵趨?shù)里面有等號(hào),所以在調(diào)用之前就要通過(guò)一個(gè)處理和轉(zhuǎn)換,這一步也是必須的。

          ?????????? 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, 所以也只能想到這個(gè)解決方案,如果大家有好的解決辦法,還請(qǐng)多多指教。



          |----------------------------------------------------------------------------------------|
                                     版權(quán)聲明  版權(quán)所有 @zhyiwww
                      引用請(qǐng)注明來(lái)源 http://www.aygfsteel.com/zhyiwww   
          |----------------------------------------------------------------------------------------|
          posted on 2007-05-14 16:28 zhyiwww 閱讀(3242) 評(píng)論(3)  編輯  收藏 所屬分類: javascript

          FeedBack:
          # re: AJAX中從遠(yuǎn)程URL動(dòng)態(tài)取得xml的方法
          2007-05-14 17:36 | ltw
          可以啊 是這么做的  回復(fù)  更多評(píng)論
            
          # re: AJAX中從遠(yuǎn)程URL動(dòng)態(tài)取得xml的方法
          2007-05-14 17:38 | ltw
          不過(guò) 為什么返回信息不用responseXML直接好解析呢  回復(fù)  更多評(píng)論
            
          # re: AJAX中從遠(yuǎn)程URL動(dòng)態(tài)取得xml的方法
          2007-05-14 19:05 | TiGERTiAN
          一般就是這樣調(diào)用的,叫做Proxy  回復(fù)  更多評(píng)論
            
          主站蜘蛛池模板: 高密市| 东港市| 二连浩特市| 修文县| 团风县| 西昌市| 迁安市| 青田县| 泰来县| 外汇| 伊金霍洛旗| 灵丘县| 奇台县| 铜陵市| 民勤县| 高安市| 兰州市| 阿拉善盟| 江都市| 伊川县| 施甸县| 玉屏| 长春市| 东明县| 宜阳县| 扶沟县| 鹿邑县| 衡东县| 博爱县| 桐城市| 青田县| 阿鲁科尔沁旗| 紫金县| 新田县| 长春市| 陕西省| 义乌市| 大厂| 静宁县| 扎兰屯市| 普兰县|