【问题标题】:How to get file from another server?如何从另一台服务器获取文件?
【发布时间】:2013-03-19 08:54:58
【问题描述】:

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

【问题讨论】:

标签: javascript json xmlhttprequest tomcat7


【解决方案1】:

浏览器中的纯 JS 没有,没有。

跨域 AJAX 违反了same origin policy

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

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

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

【讨论】:

  • 我正在使用 tomcat 服务器来运行我的 webapp,所以基本上我可以允许 CORS。但是,我为测试它而创建的 webapp 只包含“note.xml”,那么我应该将这个标头(Access-Control-Allow-Origin: *)放在哪里?
  • 标头需要与尝试进行跨域请求的 HTML 页面一起发送。
猜你喜欢
  • 2011-12-12
  • 2021-10-04
  • 2012-06-06
  • 2021-11-01
  • 1970-01-01
  • 2012-02-20
  • 2017-01-23
  • 1970-01-01
  • 2019-04-15
相关资源
最近更新 更多