2013-03-19 7 views
0

XHR을 수행하는 방법을 배우고 웹 서버 (tomcat7)에서 w3school의 코드를 사용해보십시오. HTML과 같은 파일에 "note.xml"을 배치하면 아래 코드를 사용하여 XML 파일을 가져올 수 있습니다.다른 서버에서 파일을 가져 오는 방법은 무엇입니까?

xmlhttp.open("GET","note.xml",true); 

그러나 "note.xml"을 다른 웹 응용 프로그램 위치로 이동하면 동일한 방법을 사용할 수 없습니다. 또한 아래 코드는 XML 파일을 가져올 수 없습니다.

xmlhttp.open("GET","http://localhost:8080/anotherWEBapp/note.xml",true); 

HTML :

<html> 
<body> 
<h1>W3Schools Internal Note</h1> 
<div> 
<b>To:</b> <span id="to"></span><br /> 
<b>From:</b> <span id="from"></span><br /> 
<b>Message:</b> <span id="message"></span> 
</div> 
<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://localhost:8080/test-app/note.xml",true); 
xmlhttp.send(); 
xmlDoc=xmlhttp.responseXML; 

document.getElementById("to").innerHTML= 
xmlDoc.getElementsByTagName("to")[0].childNodes[0].nodeValue; 
document.getElementById("from").innerHTML= 
xmlDoc.getElementsByTagName("from")[0].childNodes[0].nodeValue; 
document.getElementById("message").innerHTML= 
xmlDoc.getElementsByTagName("body")[0].childNodes[0].nodeValue; 
</script> 

</body> 
</html> 

는 난 단지 자바 스크립트의 사용과 XML 파일을 얻을 수 있어요 어쨌든이 있나요?

+1

다음 참조 자료를 읽으십시오. http://en.wikipedia.org/wiki/Same_origin_policy –

답변

2

브라우저에서 순수하지 JS, 아니요.

교차 도메인 AJAX는 same origin policy을 위반합니다.

다른 서버가 허용해야합니다. 하나의 표준을 따르는 방법은 CORS입니다. 그러나 원격 서버를 제어하고 수정하여이를 해제해야합니다.

또는 서버 코드를 조정할 수있는 경우 조정할 수 있습니다. 동일한 도메인에서 AJAX 요청을 /proxy?url=http://example.com/somefile.xml과 같은 것으로 만듭니다. 그런 다음 서버 코드는 백엔드에서 해당 파일을 가져 와서 렌더링합니다. 웹 페이지가로드 된 동일한 서버와 통신하기 때문에 교차 출처 정책을 위반하지 않으며 서버가하는 일이 비즈니스가 아닌 것입니다.

또는 JSONP을 사용할 수 있습니다. 그러나 다시 말하지만,이 작업을 수행하려면 원격 호스트에서 사용자가 원하는 컨텐츠를 페이지로 전달하는 JS 함수 실행에서 원하는 컨텐츠를 래핑하는 협력이 필요합니다.

+0

Tomcat 서버를 사용하여 webapp을 실행하므로 기본적으로 CORS를 허용 할 수 있습니다. 그러나 테스트를 위해 만든 webapp에는 "note.xml"만 포함되어 있으므로이 헤더 (Access-Control-Allow-Origin : *)는 어디에 있습니까? –

+0

헤더는 도메인 간 요청을 시도하는 HTML 페이지와 함께 보내야합니다. – Adrian

+0

CORS로 작업 할 수 있도록했습니다. 고마워! –

관련 문제