如何从其他服务器获取文件?

时间:2013-03-19 00:43:49

标签: javascript json xmlhttprequest tomcat7

我正在学习如何执行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文件吗?

1 个答案:

答案 0 :(得分:2)

在浏览器JS中不是纯粹的,没有。

跨域AJAX违反了same origin policy

另一台服务器需要允许你这样做。符合标准的方法是CORS。但是你需要控制和修改远程服务器才能将其关闭。

或者,如果您有自己的服务器代码进行调整,您可以通过它进行代理。您在同一个域上对/proxy?url=http://example.com/somefile.xml之类的内容发出AJAX请求。然后,您的服务器代码将在后端获取该文件并进行呈现。您不违反交叉来源政策,因为网页与其加载的服务器进行通信,以及您的服务器所做的事情不是它的业务。

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