我正在学习如何执行 XHR 并将 w3school 的代码放入我的网络服务器(tomcat7)中进行尝试。当我将“note.xml”放在与 html 相同的文件中时,我可以使用下面的代码来获取 XML 文件。
xmlhttp.open("GET","note.xml",true);
但是,如果我将“note.xml”移动到另一个 web 应用程序位置,我将无法使用相同的方法。下面的代码也无法获取 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 文件?
最佳答案
对于纯浏览器 JS 来说不行。
跨域 AJAX 违反了 same origin policy .
其他服务器需要允许您这样做。一种符合标准的方式是 CORS 。但您需要控制和修改远程服务器才能实现此目的。
或者,如果您有自己的服务器代码需要调整,您可以通过它代理事物。您在同一域上向 /proxy?url=http://example.com/somefile.xml
等内容发出 AJAX 请求。然后,您的服务器代码在后端获取该文件并呈现它。您没有违反跨源策略,因为网页与其加载的同一服务器进行通信,而您的服务器所做的事情与它无关。
或者您可以使用JSONP 。但同样,这需要远程主机的配合,远程主机会将您想要的内容包装在 JS 函数执行中,从而将内容传递到您的页面。
关于javascript - 如何从另一台服务器获取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15489598/