javascript - 处理传单 map 中的ajax请求

标签 javascript jquery ajax leaflet

我有一个非常基本的传单 map ,使用leaflet-panel-layers来创建一个漂亮的图层控件。我有两个函数来创建图层和叠加层。我的数据位于外部 geoJSON 文件中,这似乎是我的问题,因为传单不提供任何获取外部 geoJSON 的内容。我还使用 proj4leaflet 库来使用 json 中给出的投影。 所以谷歌告诉我使用ajax,不幸的是我对此一无所知。我复制粘贴了这样的内容:

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;
}

我的 map 是这样构建的:

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);

如果我想直接将图层添加到 map 中,这实际上效果很好。但就我而言,异步请求似乎在我的图层切换器添加到 map 后准备就绪,因此图层不会出现在那里。 有没有什么方法可以简单地解决这个问题而不需要深入回调?

最佳答案

请求完成后添加您的控件。这可以通过回调函数来完成:

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);
});

关于javascript - 处理传单 map 中的ajax请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31340111/

相关文章:

jquery - session 过期后,我的 ajax 调用返回文件未找到错误?

javascript - 为什么 "Last visit was at "+ 一些 Date.toLocaleDateString();是个坏习惯?

javascript 窗口和 cfform

javascript - facebook如何在浏览器地址栏中重写页面的源URL?

javascript - $.get 不工作

jquery - 我怎样才能让这个 Accordion 中的元素在第二次点击它们后切换和隐藏内容?

javascript - 如何用星号替换 MongoDB 连接字符串中的密码 - JavaScript?

javascript - Axios 向后端发布请求参数未定义

javascript - 如何使用标准的 javascript 方法选择节点数组

javascript - 将文本拖入文本框时跨浏览器触发 javascript 事件