0

我正在学习如何执行 XHR,并将来自 w3school 的代码放在我的网络服务器(tomcat7)中进行尝试。当我将“note.xml”与 html 放在同一个文件中时,我可以使用下面的代码来获取 XML 文件。

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

但是,如果我将“note.xml”移动到另一个 webapp 位置,我就不能使用相同的方法。下面的代码也无法获取 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>

无论如何我只能使用 javascript 来获取 XML 文件吗?

4

1 回答 1

3

不是纯浏览器 JS,不是。

跨域 AJAX 违反同源策略

另一台服务器需要允许您这样做。一种符合标准的方式是CORS。但是您需要控制和修改远程服务器才能完成此任务。

或者,如果您有自己的服务器代码要调整,您可以通过它代理事物。您在同一个域上向类似/proxy?url=http://example.com/somefile.xml. 然后,您的服务器代码会在后端获取该文件并呈现它。您不会违反跨源策略,因为该网页与加载它的同一服务器通信,而您的服务器所做的不是它的业务。

或者你可以使用JSONP。但同样,这需要远程主机的合作,它将您想要的内容包装在一个 JS 函数执行中,该函数执行将内容传递到您的页面。

于 2013-03-19T00:52:02.557 回答