2015-07-18 3 views
0

Внутри обратного вызова ajax У меня есть все функции, как ожидалось, но у меня их нет на улице.Openlayers 3 source source issue

Что мне не хватает?

var geojsonSource = new ol.source.Vector(); 
$.ajax('assets/data/data.geojson').then(function(response) { 
    var geojsonFormat = new ol.format.GeoJSON(); 
    var features = geojsonFormat.readFeatures(response, {featureProjection: 'EPSG:4326'}); 

    geojsonSource.addFeatures(features); 
    console.log(geojsonSource.getFeatures()); // this work 
}); 
console.log(geojsonSource.getFeatures()); // this doesn't work 
+0

Это не OpenLayers (или вектор источник) проблема, это вызвано тем, что JavaScript является асинхронным и последней строкой выполняется * перед тем * выполняется функция обработчика AJAX (она вызывается только при полной загрузке удаленных данных). – kryger

+0

Возможный дубликат [Как сделать код javascript execute \ * в порядке \ *] (http://stackoverflow.com/questions/2637626/how-do-you-make-javascript-code-execute-in-order) – kryger

ответ

1

Все в порядке с вашим фрагментом. Как сказал @kryger, AJAX представляет собой асинхронный Javascript и XML. Таким образом, зарегистрировать слушатель, чтобы знать, когда ваши функции будут добавлены к источнику, как:

geojsonSource.on('addfeature', function(event){ 
    console.log(geojsonSource.getFeatures()); 

});