我知道(我认为)XMLHTTPRequest对象遵守“同域”策略。但是,我想创建一个简单的(POC)本地HTML文件,该文件从Web服务器下载XML并使用它做点什么(让我们从一个简单的“ alert()开始)。

有可能吗?我需要特殊的Firefox配置选项吗?

我要下载的服务器是 不是 在我的控制下(实际上是Google API)。

我的简单尝试是来自 Mozilla的“使用xmlhttprequest”页面. 。它返回一个错误,我从“发送”方法中真正了解。

免责声明:我主要是C/C ++开发人员 - 从未做过任何认真的JS编程,从未尝试过使用这些API。

有帮助吗?

解决方案

XMLHTTPREQUEST实际上遵守相同域策略的更严格的实现:虽然您可以设置文档。Domain属性允许从两个子域中提供的JavaScript互相交谈,但您不能使用XMLHTTTPRequeStObject进行此操作。就您而言,转到一个完全不同的域,您也无法使用JavaScript做到这一点。

有几个选择。首先,您可以使用反向代理来使外部站点是您网站的子域。看看Apache的MOD_PROXY,特别是ProxypassReverse

另一个替代方法是将数据作为JSON对象返回:u003Cscript src="foo"> can retrieve whatever data it wants from wherever it wants. Downside of this is that it's not (easily) repeatable (as in multiple requests from same page).

我还建议您使用Google进行“ Google Mashups”。其中大多数生活在“ Googlemashops.com”域上,这使得实现变得更加容易。一些居住在该领域之外,可能会给您一些想法。

编辑:我建议不要直接使用xmlhttprequest对象,而是建议浏览第三方库,例如prototype.js

其他提示

如果您要检索的XML由Google的JS API之一返回,则不需要XMLHTTPRequest(因为只能在与您的页面Anway的同一域上使用)。

因此,在使用Google API的情况下,例如MAPS ONE,通常是从页面上某处添加对其公共API的引用:

<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>

然后添加对您计划使用的特定API的引用到您的页面:

<script type="text/javascript">google.load("maps", "2");</script>

现在,您可以调用该API提供的各种功能:

<script type="text/javascript">
  function initialize() {
    var map = new google.maps.Map2(document.getElementById("map"));
    map.setCenter(new google.maps.LatLng(41.86, 87.68), 13);
  }
  google.setOnLoadCallback(initialize);
</script>

无需XMLHTTPREQUEST :)

您可以使用JSONP执行此操作。我这样做 这里 使用jQuery和PHP。基本上,我使用PHP代理包装JSON答复,以便JQuery可以处理。它在BSD下。

或者尝试使用IE8。如果您从磁盘运行,而不是网站IE8会忽略所有普通域的限制并获取所需的数据。

使用jQuery(大概是XHR,但我尽量不直接使用它),只要您没有指定不寻常的标题或非GEG方法,您就可以愉快地执行跨域请求。如果您想使用这些,则必须控制服务器才能启用选项请求。

https://developer.mozilla.org/en/http_access_control 有关详细信息。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top