我在将GML文件加载到OpenLayers时遇到了困难。我已将问题解决了以下问题: - 复制/通过以下示例:http://openlayers.org/dev/examples/behavior-fixed-http-gml.html - 将所有链接替换为绝对
这导致我从localhost(file:///)运行的以下文件/代码:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<title>OpenLayers Vector Behavior Example</title>
<link rel="stylesheet" href="http://openlayers.org/dev/theme/default/style.css" type="text/css" />
<link rel="stylesheet" href="http://openlayers.org/dev/examples/style.css" type="text/css" />
<script src="http://openlayers.org/dev/OpenLayers.js"></script>
<script type="text/javascript">
var map;
function init(){
map = new OpenLayers.Map('map');
var wms = new OpenLayers.Layer.WMS(
"OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0",
{layers: 'basic'}
);
var layer = new OpenLayers.Layer.Vector("GML", {
strategies: [new OpenLayers.Strategy.Fixed()],
protocol: new OpenLayers.Protocol.HTTP({
url: "http://openlayers.org/dev/examples/gml/polygon.xml",
format: new OpenLayers.Format.GML()
})
});
map.addLayers([wms, layer]);
map.zoomToExtent(new OpenLayers.Bounds(
-3.92, 44.34, 4.87, 49.55
));
}
</script>
</head>
<body onload="init()">
<h1 id="title">Vector Behavior Example (Fixed/HTTP/GML)</h1>
<div id="tags">
vector, strategy, strategies, protocoll, advanced, gml, http, fixed
</div>
<p id="shortdesc">
Vector layer with a Fixed strategy, HTTP protocol, and GML format.
</p>
<div id="map" class="smallmap"></div>
<div id="docs">
The vector layer shown uses the Fixed strategy, the HTTP protocol,
and the GML format.
The Fixed strategy is a simple strategy that fetches features once
and never re-requests new data.
The HTTP protocol makes requests using HTTP verbs. It should be
constructed with a url that corresponds to a collection of features
(a resource on some server).
The GML format is used to serialize features.
</div>
</body>
</html>
问题是没有显示GML(其他一切都很好)。我在控制台中没有错误,但请求状态为200 OK(在FF控制台和FireBug网络选项卡中)。 我错过了什么?同源策略失败应该会出现一些错误,不是吗?
答案 0 :(得分:1)
它确实在Chrome中提供了Access-Control-Allow-Origin错误。
XMLHttpRequest无法加载 http://openlayers.org/dev/examples/gml/polygon.xml。 原点http://fiddle.jshell.net不是 允许的 访问控制允许来源。
对于FF,它确实提供了200响应代码,但响应中不包含任何数据。
答案 1 :(得分:0)
为了保护用户免受向远程服务器发送信息的脚本的影响,有一个“相同的原始策略”,它表明您只能通过来自与您当前正在查看的页面相同的服务器的HTTP请求来接收数据。
这解释了为什么wireshark有信息,而firebug没有:浏览器不允许传输信息。
JSON-P是一个解决这个问题的技巧:
http://en.wikipedia.org/wiki/JSONP
如果您无权访问JSONP源或不需要JSONP方法,则必须使用代理,该代理会将您的请求转发到远程服务器并返回信息,就好像它来自您的自己的服务器然后,浏览器将无法告知通信最终将进入远程服务器并允许HTTP请求。