Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firefox中的跨站点XmlHttpRequest?_Javascript_Api_Firefox_Xmlhttprequest - Fatal编程技术网

Javascript Firefox中的跨站点XmlHttpRequest?

Javascript Firefox中的跨站点XmlHttpRequest?,javascript,api,firefox,xmlhttprequest,Javascript,Api,Firefox,Xmlhttprequest,我理解(我认为)XmlHttpRequest对象遵循“同一域”策略。但是,我想创建一个简单的(POC)本地html文件,从web服务器下载XML并对其进行处理(让我们从一个简单的“alert()”开始) 有可能吗?我需要一个特殊的Firefox配置选项吗 我试图下载的服务器不在我的控制之下(它实际上是一个谷歌API) 我的简单尝试是来自的代码。它返回一个错误,我对“send”方法不太理解 免责声明:我主要是一名C/C++开发人员-从未做过任何严肃的JS编程,也从未尝试过使用这些API。XMLHt

我理解(我认为)XmlHttpRequest对象遵循“同一域”策略。但是,我想创建一个简单的(POC)本地html文件,从web服务器下载XML并对其进行处理(让我们从一个简单的“alert()”开始)

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

我试图下载的服务器不在我的控制之下(它实际上是一个谷歌API)

我的简单尝试是来自的代码。它返回一个错误,我对“send”方法不太理解


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

XMLHttpRequest实际上遵守了同一域策略的更严格的实现:虽然您可以设置document.domain属性以允许来自两个子域的JavaScript相互通信,使用XMLHttpRequestObject无法做到这一点。在您的情况下,要进入一个完全不同的领域,您也不能使用JavaScript

有两种选择。首先,可以使用反向代理使外部站点看起来是站点的子域。看看Apache的mod_代理,特别是ProxyPassReverse

另一种选择是以JSON对象的形式返回数据:可以从任何地方检索它想要的任何数据。这样做的缺点是它不(容易)重复(就像来自同一页面的多个请求一样)

我还建议你用谷歌搜索“谷歌mashup”。其中大多数都位于“googlemashops.com”域中,这使得实现更加容易。一些人生活在这个领域之外,可能会给你一些想法


编辑:与其直接使用XMLHttpRequest对象,我建议使用prototype.js之类的第三方库,如果您试图检索的XML是由Google的js API返回的,那么就不需要XMLHttpRequest(因为它只能在与您的页面相同的域上使用)

因此,在使用Google API(如Maps one)的情况下,通常首先在页面上的某个位置添加对其通用API的引用:

<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>
<script type="text/javascript">google.load("maps", "2");</script>

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

<script type="text/javascript" src="http://www.google.com/jsapi?key=your_google_api_key"></script>
<script type="text/javascript">google.load("maps", "2");</script>
google.load(“地图”,“2”);
现在,您可以调用该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>

函数初始化(){
var map=new google.maps.Map2(document.getElementById(“map”);
地图设置中心(新的google.maps.LatLng(41.86,87.68),13);
}
setOnLoadCallback(初始化);

不需要XmlHttpRequest:)

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

您可以使用JSONP来完成此操作。我使用jQuery和PHP来实现。基本上,我使用PHP代理来包装JSON回复,以便jQuery能够处理它。它在BSD下

使用jQuery(可能还有XHR,但我尽量不直接使用它),只要不指定异常的头或非GET方法,就可以愉快地执行跨域请求。如果确实要使用这些选项,则必须控制服务器以启用选项请求


有关详细信息,请参阅。

我尝试使用的API实际上直接返回一个JSON对象。但是该对象没有名称,因此如何使用它?如果您登录到Google Reader,请参阅:我在另一个线程中用一个解决方案来解决Firefox中的限制: