我正在学习如何执行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文件吗?
答案 0 :(得分:2)
在浏览器JS中不是纯粹的,没有。
跨域AJAX违反了same origin policy。
另一台服务器需要允许你这样做。符合标准的方法是CORS。但是你需要控制和修改远程服务器才能将其关闭。
或者,如果您有自己的服务器代码进行调整,您可以通过它进行代理。您在同一个域上对/proxy?url=http://example.com/somefile.xml
之类的内容发出AJAX请求。然后,您的服务器代码将在后端获取该文件并进行呈现。您不违反交叉来源政策,因为网页与其加载的服务器进行通信,以及您的服务器所做的事情不是它的业务。
或者您可以使用JSONP。但同样,这需要来自远程主机的合作,它将在JS函数执行中包含您想要的内容,从而将内容传递到您的页面。