2013-01-14 3 views
2

온라인 XML 파일에서 데이터를 가져오고 싶습니다. http://data.one.gov.hk/others/td/speedmap.xml. 자바 스크립트를 로컬에서 (서블릿없이) 호출하면 작동합니다. 그러나 jsp 및 java 서블릿을 통해 호출하면 작동하지 않습니다. 온라인 xml 파일에서 데이터를 가져올 수있는 다른 방법이 있습니까?자바/자바 스크립트 온라인 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> 
+0

어디에서 실패합니까? XML을 읽거나 구문 분석 하시겠습니까? 원인을 더 잘 보려면 브라우저 콘솔에 로그를 추가하십시오. – asgs

+1

정확히 작동하지 않는 것은 무엇입니까? 'js_workable.js'의 예외가있을 수 있습니까? JSP 페이지가 아닌 게재 된 HTML 페이지 만 게시 하시겠습니까? Btw,'LANGUAGE = "JavaScript"'는 더 이상 사용되지 않습니다. – Bergi

+0

나는 지금 당장 그럴 이유가 없다. 나는 이것을 점검 할 것이다. BTW 너의 제안을 주셔서 감사합니다! – user1976340

답변

3

는 크로스 도메인 아약스 요청입니다 -Allow-Origin 규칙.

해결책 당신은 jsp/servlet을 사용하여 XML 컨텐츠를 먼저 검색 한 다음, 자바 스크립트를 사용하기 위해 로컬로 요청하는 HTTP 요청을 사용할 수 있습니다.

+0

감사합니다. 더 많은 것을 배울 수 있도록 나에게 관련 웹 사이트를 제공해 주시겠습니까? 예를 들어, jsp/servlet은 XML 컨텐츠를 검색하기위한 HTTP 요청을 작성했습니다. – user1976340

+0

@ user1976340, 안녕하세요, JSP로 많이 알지 못합니다. 그러나 나는 그것이 당신을 도울 것 같아요. http://stackoverflow.com/a/8369324/782072 – Cauliturtle

+0

확인. 고마워요! – user1976340