简体   繁体   English

在传单地图中处理Ajax请求

[英]Handling ajax-request in leaflet map

I have a very basic leaflet map using leaflet-panel-layers to create a pretty layer control. 我有一个非常基本的传单地图,使用leaflet-panel-layers创建漂亮的图层控件。 I have two functions to create my layers and overlays. 我有两个函数来创建图层和叠加层。 My data is in external geoJSON-Files what seems to be my problem as leaflet does not offer anything to get an external geoJSON. 我的数据在外部geoJSON-Files中,这似乎是我的问题,因为传单没有提供任何获取外部geoJSON的功能。 I also use proj4leaflet library to use the projection given in my json. 我还使用proj4leaflet库来使用json中给出的投影。 So google told me to use ajax about which I unfortunately don't know anything. 因此,谷歌告诉我使用Ajax,但我对此一无所知。 I copy-pasted something like this: 我复制粘贴了以下内容:

function getOverlays(){
    var url = 'myServerUrl';
    overlays = [];

    $.ajax({
        url: url,
        dataType: 'jsonp',
        jsonpCallback: 'getJson',
        success: function(response) {
            overlays.push({
                name: "Something",
                layer: L.Proj.geoJson(response, {
                ...
                }
            });
        }
    });
    return overlays;
}

my map is built like this: 我的地图是这样构建的:

var map = L.map('map', {
    layers: layers[0].layer
});
var layers = getBaseLayers();
var overlays = getOverlays();
var panelLayers = new L.Control.PanelLayers(layers,overlays);
map.addControl(panelLayers);

This actually works fine if I want to add the layers to the map directly. 如果我想直接将图层添加到地图,这实际上可以正常工作。 But in my case the asynchronous request seems to be ready after my layer switcher is added to my map so the layers don't appear there. 但是在我的情况下,在将图层切换器添加到地图 ,异步请求似乎已经准备就绪因此图层不会出现在此处。 Is there any way to solve this simply without diving into callbacks? 有没有什么方法可以简单地解决这个问题而无需深入回调?

Add your control after request has finished. 请求完成后添加您的控件。 This can be done with a callback function: 这可以通过回调函数完成:

function getOverlays(callback){
    var url = 'myServerUrl';
    overlays = [];

    $.ajax({
        url: url,
        dataType: 'jsonp',
        jsonpCallback: 'getJson',
        success: function(response) {
            overlays.push({
                name: "Something",
                layer: L.Proj.geoJson(response, {
                ...
                }
            });
            callback(overlays)
        }
    });
    return overlays;
}

var map = L.map('map', {
    layers: layers[0].layer
});
var layers = getBaseLayers();
getOverlays(function(overlays){
    var panelLayers = new L.Control.PanelLayers(layers,overlays);
    map.addControl(panelLayers);
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM