Javascript 传单图例地图未定义

Javascript 传单图例地图未定义,javascript,leaflet,Javascript,Leaflet,我一直在尝试在我的传单地图上添加一个图例。我知道我应该很简单,我已经试过很多次了。然而,我无法让传奇人物出现 当我在其他项目中复制/粘贴图例片段时,我确实会在屏幕上看到图例 我将Firebug与我的传单地图一起运行,以了解问题所在: 正如你在上面看到的,“地图”是未定义的。只有将legend.addTo(map)添加到代码中时,才会出现这种情况。如果我删除了这个代码段,整个代码就可以完美地运行,并且不会再出现“map”错误(即使我仍然在多个地方使用变量“map”) 似乎传单.src.js文件有

我一直在尝试在我的传单地图上添加一个图例。我知道我应该很简单,我已经试过很多次了。然而,我无法让传奇人物出现

当我在其他项目中复制/粘贴图例片段时,我确实会在屏幕上看到图例

我将Firebug与我的传单地图一起运行,以了解问题所在:

正如你在上面看到的,“地图”是未定义的。只有将
legend.addTo(map)
添加到代码中时,才会出现这种情况。如果我删除了这个代码段,整个代码就可以完美地运行,并且不会再出现“map”错误(即使我仍然在多个地方使用变量“map”)

似乎传单.src.js文件有问题,但我不想弄乱它

我包含了我所有的代码,希望有人能找到问题。我已经为《传奇》工作了几天,现在我开始感到绝望

    // globale variabelen
    var map,
        tab1,
        fields = ["id", "x", "y", "keten", "name"], 
        autocomplete = [];

    $(document).ready(initialize);

    function initialize(){
        $("#map").height($(window).height());

        map = L.map("map", {
            center: L.latLng(53.21587, 6.556676 ),
            zoom: 12
        });

        var tileLayer = L.tileLayer("http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png").addTo(map);

        getData();

    };

    function getColor(keten) {
        return  keten == "MacDonalds"   ? '#800888' :
                keten == "Subway"       ? '#969696' :
                keten == "KFC"          ? '#081d58' :
                keten == "BurgerKing"   ? '#006837' :
                keten == "Dominos"      ? '#fed976' :
                keten == "NYPizza"      ? '#fed976' :
                                          '#252525' ;
        }

    function getData(){
        $.ajax("php/getData.php", {
            data: {
                table: "fastfood_groningen",
                fields: fields
            },
            success: function(data){
                mapData(data);
            }
        })
    };

                map.eachLayer(function(layer){
                    //if niet de tile layer
                    if (typeof layer._url === "undefined"){
                        map.removeLayer(layer);
                    }
                });

                // Aanmaken van een geojson container object
                var geojson = {
                    "type": "FeatureCollection",
                    "features": []
                };

                var dataArray = data.split(", ;");
                dataArray.pop();

            console.log(dataArray);

                dataArray.forEach(function(d){
                    d = d.split(", "); 

                    var feature = {
                        "type": "Feature",
                        "properties": {}, //properties object container
                        "geometry": JSON.parse(d[fields.length]) //parse geometry
                    };

                    // Hiermee definieer je de lengte van 1 feature die in dit geval gelijk is aan de lengte van velden.
                    for (var i=0; i<fields.length; i++){
                        feature.properties[fields[i]] = d[i];
                    };

                    // De feature namen worden toegevoegd waarna de list wordt ge-autocomplete 
                    if ($.inArray(feature.properties.keten, autocomplete) == -1){
                        autocomplete.push(feature.properties.keten);
                    };

                    geojson.features.push(feature);
                });
            console.log(geojson);

                //activatie van de autocomplete on keten input
                $("input[name=keten]").autocomplete({
                    source: autocomplete
                });


            window["mapDataLayer"] = L.geoJson(geojson, {
                    pointToLayer: function (feature, latlng) {
                        var markerStyle = { 
                            fillColor: getColor(feature.properties.keten),
                            color: "#FFF",
                            fillOpacity: 0.5,
                            opacity: 0.8,
                            weight: 1,
                            radius: 8
                        };

                        return L.circleMarker(latlng, markerStyle);
                    },
                    onEachFeature: function (feature, layer) {
                        var html = "";
                        for (prop in feature.properties){
                            html += prop+": "+feature.properties[prop]+"<br>";
                        };
                        layer.bindPopup(html);
                    }
                }).addTo(map);

    };

       // Custom layerpanel --WORK IN PROGRESS!
            $( "input[value=mapDataLayer]" ).click(function( event ) {
                layerClicked = window[event.target.value];
                    if (map.hasLayer(layerClicked)) {
                        map.removeLayer(layerClicked);
                    }
                    else{
                        map.addLayer(layerClicked);
                    } ;
            });


    function submitQuery(){
        //Haal de data van het formulier op
        var formdata = $("form").serializeArray();

        var data = {
            table: "fastfood_groningen",
            fields: fields
        };
        formdata.forEach(function(dataobj){
            data[dataobj.name] = dataobj.value;
        });

        $.ajax("php/getData.php", {
            data: data,
            success: function(data){
                mapData(data);
            }
        })
    };

    ;

//legend controls and info
var legend = new L.control({position: 'bottomright'});

legend.onAdd = function (map) {
    var div = L.DomUtil.create('div', 'info legend'),
        grades = [0.00001, 0.7300001, 2.9900001, 6.700001],
        labels = ['Legend (Value = CO2 per Capita)'],
        from, to;

    labels.push('<i style="background: #eeedd8"></i> ' + 'No Data Available');

    for (var i = 0; i < grades.length; i++) {
       from = grades[i];
       to = grades[i + 1];

        labels.push('<i style="background:' + getColor(from + '1' ) + '"></i> ' + from + (to ? '&ndash;' + to : '&ndash;43.893036'));
    }

    div.innerHTML = labels.join('<br>');
    return div;
};

legend.addTo(map);
//globale variabelen
var映射,
表1,
字段=[“id”、“x”、“y”、“keten”、“name”],
自动完成=[];
$(文档).ready(初始化);
函数初始化(){
$(“#map”).height($(window.height());
map=L.map(“map”{
中心:L.latLng(53.21587,6.556676),
缩放:12
});
var tileLayer=L.tileLayer(“http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png”).addTo(map);
getData();
};
函数getColor(keten){
return keten==“MacDonalds”?“#800888”:
凯顿==“地铁”?#9696':
凯顿==“肯德基”?#081d58':
keten==“汉堡王”?#006837':
凯顿==“多米诺骨牌”?“#1976年2月”:
keten==“NYPIZA”?“#1976年2月”:
'#252525' ;
}
函数getData(){
$.ajax(“php/getData.php”{
数据:{
表:“groningen快餐店”,
字段:字段
},
成功:功能(数据){
地图数据(数据);
}
})
};
map.eachLayer(函数(层){
//如果粘瓦层
如果(图层类型。\u url==“未定义”){
map.removeLayer(层);
}
});
//Aanmaken van een geojson容器对象
var geojson={
“类型”:“FeatureCollection”,
“功能”:[]
};
var dataArray=data.split(“,;”);
dataArray.pop();
log(数据数组);
dataArray.forEach(函数(d){
d=d.拆分(“,”);
变量特征={
“类型”:“功能”,
“属性”:{},//属性对象容器
“geometry”:JSON.parse(d[fields.length])//解析几何体
};
//在dit geval gelijk中,Hiermee Defineer je de lengte van 1特征模具是一个长型van velden。

for(var i=0;i出于某种原因
legend.addTo(map)
运行得很早,尽管它是我代码的最后一行

在运行
legend.addTo(map)
之前,我使用以下代码检查某个函数(初始化)是否已完成:

 $.when($.ajax(initialize())).then(function () {
     legend.addTo(map);
 });

正确缩进你的代码-你会看到你在调用
legent.addTo(map)
之前调用了
initialize()
。谢谢你的回复,伊万,但我不明白你的意思。legend.addTo(map)在我的代码底部(就像我所做的大部分教程一样),我没有看到initialize()在它之前被调用。你能解释一下你的意思吗?把一个
console.log()
放在
initialize()
里面,另一个
console.log()
放在
legend.addTo(map)
和indent.your.code.旁边。我已经添加了console.log()对于您所说的区域,不幸的是,我根本没有进步。我仍然会得到与以前相同的“map”错误。初始化()中的console.log()返回第27行,而legend.addTo(map)旁边的console.log()完全不返回任何内容。注释掉
legend.addTo(map)
并在
console.log()中使用
performance.now()
s以查看哪个先运行。