未捕获的TypeError:无法调用null的方法'getElementsByTagName'

时间:2014-02-06 13:33:39

标签: javascript php kml

我花了很多时间来修复这个bug。我真的不知道问题是什么。

http://pastebin.com/wXEHsqeY是代码所在的位置。错误指向传单库kml.js但我没有触及此文件。错误似乎来自第366-390行,因为当我删除它时没有错误。

我真的很感激任何人都可以提供帮助。

由于

更新:对使用错误格式表示歉意,请参阅我坚持的更基本的示例。

<body>
    <div style="width:100%; height:100%" id="map"></div>

<?php
function getKmlFiles() {

    $folder = 'kml/';
    $filetype = '*.*';
    $files = glob($folder.$filetype);

    for ($i=0; $i<count($files); $i++) {

        echo '"' . $files[$i].'",';
    }

}
?>

<script>

var kmlArray = [<?php getKmlFiles(); ?>];

console.log(kmlArray);

var map = new L.Map('map', {center: new L.LatLng(58.4, 43.0), zoom: 11});
var osm = new L.TileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png');
var track = new L.KML("http://localhost/kmllayer/kml.kml", {async: true});
track.on("loaded", function(e) { map.fitBounds(e.target.getBounds()); });

map.addLayer(track);
map.addLayer(osm);

    var object ={'THW-UK2 (R)':track};
for (var i=0; i<kmlArray.length; i++) {

    var kmlLayer = new L.KML("http://localhost/kmllayer/" + kmlArray[i] , {async: true});
    object[kmlArray[i]] = kmlLayer;
    map.addLayer(kmlLayer);

kmlLayer.on("loaded", function(e) { 
            map.fitBounds(e.target.getBounds());
         });

         map.addLayer(kmlLayer);

}
console.log(object);

map.addControl(new L.Control.Layers({}, object, {})); 


</script>




<script type='text/javascript'>

map.on( "zoomend", function( e ) {
    console.log( "zoom level is " + map.getZoom() )
});

map.on( "zoomend", function( e ) {
    zoom = map.getZoom( );
    if ( zoom <= 3 ) {
        alert('zoomed out');
    }
});

</script>

2 个答案:

答案 0 :(得分:0)

您正在js file的第366行开启 php

var kmlArray = [<?php getKmlFiles(); ?>];

如果你想在js文件中使用php的值,请创建一个变量global并在你的js文件中调用它。

<script>
abc = "<?php getKmlFiles(); ?>";
</script>

在你的js文件中

var kmlArray = abc;

答案 1 :(得分:0)

对于遇到类似问题的任何人,原因是kml文件被保存为.kmz文件但实际上并未压缩。问题现在解决了。