Google maps Type Error: a is null
Google maps Type Error: a is null
我看过类似的问题,但似乎找不到解决方案。我正在使用基于 TWIG/Slim 框架的 UserFrosting。我的代码如下,并产生以下错误,没有显示地图。
TypeError: a 为 null1 main.js:19:628
<!DOCTYPE html>
<html lang="en">
{% include 'components/head.html' %}
<body>
<div id = "wrapper">
{% include 'components/nav-account.html' %}
<div id = "page-wrapper">
{% include 'components/alerts.html' %}
<div class = "container">
<style type = "text/css">
html, body, #map-canvas{ height:100%;
margin:0;
padding:0;
}
</style>
<script type = "text/javascript"
src = "https://maps.googleapis.com/maps/api/js?
key=AIzaSyB76xBqfQdgOLV77VK3JZ09vWwk8brkMFs">
</script>
<script type="text/javascript">
var map = null;
var iLoadPoints = 0;
function addMarker(lat, lng) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
map: map,
});
}
function initialize() {
var mapOptions = {
center: {lat: 54.872128, lng: -6.284874},
zoom: 13
};
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
$(document).ready(function () {
$.getJSON('MarkersController.php', function (data) {
var locations = JSON.parse(data);
for (var i = 0; i < locations.length; i++) {
addMarker(locations[i].lat, locations[i].lng);
}
});
});
}
google.maps.event.addListenerOnce(map, 'idle', function () {
iLoadPoints += 1;
if (iLoadPoints === 2) {
initialize();
}
});
google.maps.event.addDomListener(window, 'load', function () {
iLoadPoints += 1;
if (iLoadPoints === 2) {
initialize();
}
});
</script>
<div id="map-canvas" style="height:600px; width:600px;
margin-top:100px; margin-bottom: 100px;
">
</div>
</div>
{% include 'components/footer.html' %}
</div>
</div>
</body>
</html>
你应该在 src 属性中传递你的函数,像这样:
src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyB76xBqfQdgOLV77VK3JZ09vWwk8brkMFs&callback=initialize"
这是一个有效的 example。
如果您正确使用 UserFrosting/Slim,您不应期待直接来自 MarkersController.php
的响应。
假设你的 MarkersController.php
有一个类似 getMarkersJSON()
的方法来生成你需要的 JSON 数据,你需要创建一个 route你的 index.php
像这样:
$app->get('/markers/json/?', function () use ($app) {
$controller = new UF\MarkersController($app);
return $controller->getMarkersJSON();
});
然后在 jQuery 调用 getJSON
时,您将执行如下操作:
$.getJSON('/markers/json', function (data) {
...
});
您可以通过简单地导航到 http://example.com/markers/json
并确保您看到您期望的原始数据来测试您的路线是否正常工作。
我建议您看一下 UserFrosting documentation 以确保您了解前端控制器模式。
我看过类似的问题,但似乎找不到解决方案。我正在使用基于 TWIG/Slim 框架的 UserFrosting。我的代码如下,并产生以下错误,没有显示地图。
TypeError: a 为 null1 main.js:19:628
<!DOCTYPE html>
<html lang="en">
{% include 'components/head.html' %}
<body>
<div id = "wrapper">
{% include 'components/nav-account.html' %}
<div id = "page-wrapper">
{% include 'components/alerts.html' %}
<div class = "container">
<style type = "text/css">
html, body, #map-canvas{ height:100%;
margin:0;
padding:0;
}
</style>
<script type = "text/javascript"
src = "https://maps.googleapis.com/maps/api/js?
key=AIzaSyB76xBqfQdgOLV77VK3JZ09vWwk8brkMFs">
</script>
<script type="text/javascript">
var map = null;
var iLoadPoints = 0;
function addMarker(lat, lng) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
map: map,
});
}
function initialize() {
var mapOptions = {
center: {lat: 54.872128, lng: -6.284874},
zoom: 13
};
map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
$(document).ready(function () {
$.getJSON('MarkersController.php', function (data) {
var locations = JSON.parse(data);
for (var i = 0; i < locations.length; i++) {
addMarker(locations[i].lat, locations[i].lng);
}
});
});
}
google.maps.event.addListenerOnce(map, 'idle', function () {
iLoadPoints += 1;
if (iLoadPoints === 2) {
initialize();
}
});
google.maps.event.addDomListener(window, 'load', function () {
iLoadPoints += 1;
if (iLoadPoints === 2) {
initialize();
}
});
</script>
<div id="map-canvas" style="height:600px; width:600px;
margin-top:100px; margin-bottom: 100px;
">
</div>
</div>
{% include 'components/footer.html' %}
</div>
</div>
</body>
</html>
你应该在 src 属性中传递你的函数,像这样:
src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyB76xBqfQdgOLV77VK3JZ09vWwk8brkMFs&callback=initialize"
这是一个有效的 example。
如果您正确使用 UserFrosting/Slim,您不应期待直接来自 MarkersController.php
的响应。
假设你的 MarkersController.php
有一个类似 getMarkersJSON()
的方法来生成你需要的 JSON 数据,你需要创建一个 route你的 index.php
像这样:
$app->get('/markers/json/?', function () use ($app) {
$controller = new UF\MarkersController($app);
return $controller->getMarkersJSON();
});
然后在 jQuery 调用 getJSON
时,您将执行如下操作:
$.getJSON('/markers/json', function (data) {
...
});
您可以通过简单地导航到 http://example.com/markers/json
并确保您看到您期望的原始数据来测试您的路线是否正常工作。
我建议您看一下 UserFrosting documentation 以确保您了解前端控制器模式。