java / javascript在线阅读XML文件

时间:2013-01-14 03:55:35

标签: java javascript jsp servlets

我想从在线xml文件中获取数据,例如http://data.one.gov.hk/others/td/speedmap.xml。 当我从本地调用HTML(没有servlet)时,它可以正常工作。 但是,当我通过jsp和java servlet调用它时,它不起作用。 是否有其他方法可以从在线xml文件中获取数据?

contentXML.jsp:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <p>CONTENT_XML</p>

        <%@ include file="source_file/js_workable.js" %>
        <%@ include file="source_file/data_retrieve.js" %>

    </body>
</html>

data_retrieve.js

<script  LANGUAGE="JavaScript">


         if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
           xmlhttp=new XMLHttpRequest();
         }
         else { // code for IE6, IE5
           xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
         }

         document.write(xmlhttp.status);
         document.write(xmlhttp.readyState);
         document.write(xmlhttp.statusText);

         xmlhttp.open("GET","http://data.one.gov.hk/others/td/speedmap.xml",false);
         xmlhttp.send(); 


         xmlDoc=xmlhttp.responseXML; 

         document.write("<table border='1'>");
         var x=xmlDoc.getElementsByTagName("jtis_speedmap");
         for (i=0;i<x.length;i++){ 
           document.write("<tr><td>");
           document.write(x[i].getElementsByTagName("LINK_ID")[0].childNodes[0].nodeValue);
           document.write("</td><td>");
           document.write(x[i].getElementsByTagName("ROAD_TYPE")[0].childNodes[0].nodeValue);
           document.write("</td></tr>");
         }
         document.write("</table>");

</script>

html文件:

<html>
 <body>

<script>
 if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.open("GET","http://data.one.gov.hk/others/td/speedmap.xml",false);
 xmlhttp.send();
 xmlDoc=xmlhttp.responseXML; 

document.write("<table border='1'>");
 var x=xmlDoc.getElementsByTagName("jtis_speedmap");
 for (i=0;i<x.length;i++)
   { 
  document.write("<tr><td>");
   document.write(x[i].getElementsByTagName("LINK_ID")[0].childNodes[0].nodeValue);
   document.write("</td><td>");
   document.write(x[i].getElementsByTagName("ROAD_TYPE")[0].childNodes[0].nodeValue);
   document.write("</td></tr>");
   }
 document.write("</table>");
 </script>

</body>
</html>

1 个答案:

答案 0 :(得分:3)

它是跨域ajax请求,因此被Access-Control-Allow-Origin规则阻止。

解决方案你可以使用jsp / servlet发出一个HTTP请求来首先检索XML内容,然后你的ajax请求在本地继续你的javascript。