OpenLayers загружает файл GML с другого сайта - PullRequest
0 голосов
/ 31 мая 2011

У меня проблемы с загрузкой GML-файла в OpenLayers. Я сократил проблему до следующего: - скопируйте / пропустите пример по адресу: http://openlayers.org/dev/examples/behavior-fixed-http-gml.html - заменить все ссылки на абсолютные

В результате получается следующий файл / код, который я запускаю с локального хоста (файл: ///):

<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 Network). Чего мне не хватает? Тот же сбой политики происхождения должен показать некоторую ошибку, нет?

Ответы [ 2 ]

1 голос
/ 31 мая 2011

Это дает ошибку Access-Control-Allow-Origin в Chrome.

XMLHttpRequest не может загрузить http://openlayers.org/dev/examples/gml/polygon.xml. Происхождение http://fiddle.jshell.net не разрешено Access-Control-Allow-Origin.

Для FF он дает код ответа 200, как вы указали, но ответ не содержит данных.

http://jsfiddle.net/niklasvh/F76Hp/3/

0 голосов
/ 16 августа 2011

Что касается защиты пользователей от сценариев, отправляющих информацию на удаленные серверы, существует «та же политика происхождения», которая гласит, что вы можете получать данные только через HTTP-запросы с того же сервера, что и страница, которую вы просматриваете в настоящее время.

Это объясняет, почему Wireshark имеет информацию, а firebug - нет: браузер запрещает передачу информации.

JSON-P - хитрость, чтобы обойти это:

http://en.wikipedia.org/wiki/JSONP

Если у вас нет доступа к источнику JSONP или вы не хотите использовать подход JSONP, вам придется использовать прокси-сервер, который перенаправит ваши запросы на удаленный сервер и вернет информацию, как если бы она поступила от вашего собственный сервер. В этом случае браузер не сможет определить, что в конечном итоге связь идет к удаленному серверу, и разрешит запросы HTTP.

...