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.blogjava.net/zhyiwww   
|----------------------------------------------------------------------------------------|
posted on 2007-05-14 16:28 zhyiwww 阅读(3232) 评论(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  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: