问题描述
|
我在将GML文件加载到OpenLayers时遇到困难。我已将问题简化为以下内容:
-在以下位置复制/粘贴示例:http://openlayers.org/dev/examples/behavior-fixed-http-gml.html
-将所有链接替换为绝对链接
这导致我从本地主机(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“网络”选项卡中)。
我缺少什么?同一原始策略失败应该显示一些错误,不是吗?
解决方法
它确实在Chrome中给出了Access-Control-Allow-Origin错误。
XMLHttpRequest无法加载
http://openlayers.org/dev/examples/gml/polygon.xml。
来源http://fiddle.jshell.net不是
被允许
访问控制允许来源。
对于FF,它确实给出了您所说的200响应代码,但是响应不包含任何数据。
http://jsfiddle.net/niklasvh/F76Hp/3/
, 为了保护用户免受脚本向远方服务器发送信息的影响,有一个“相同的源策略”,该策略指出您只能通过HTTP请求从与当前正在查看的页面相同的服务器接收数据。
这就解释了为什么Wireshark拥有信息,而Firebug却没有:浏览器不允许信息的传输。
JSON-P是解决此问题的技巧:
http://en.wikipedia.org/wiki/JSONP
如果您无权访问JSONP源或不希望使用JSONP方法,则必须使用代理,该代理会将您的请求转发到遥远的服务器并返回信息,就好像它来自您自己的信息一样服务器。然后,浏览器将无法告知通信最终将到达远程服务器,并将允许HTTP请求。