Mam stronę korzystającą z interfejsu API Map Google do wyświetlania mapy. Kiedy ładuję stronę bezpośrednio, pojawia się mapa. Jednak gdy próbuję załadować stronę za pomocą AJAX, pojawia się błąd:
Uncaught ReferenceError: google is not defined
Dlaczego to?
To jest strona z mapą:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>
<script>
var directionsDisplay;
var directionsService = new google.maps.DirectionsService();
var map;
function initialize() {
directionsDisplay = new google.maps.DirectionsRenderer();
var chicago = new google.maps.LatLng(41.850033, -87.6500523);
var mapOptions = { zoom:7, mapTypeId: google.maps.MapTypeId.ROADMAP, center: chicago }
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
directionsDisplay.setMap(map);
}
$(document).ready(function(e) { initialize() });
</script>
<div id="map_canvas" style="height: 354px; width:713px;"></div>
A oto strona z wywołaniem AJAX:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
</head>
<body>
<script>
$(document).ready(function(e) {
$('button').click(function(){
$.ajax({
type: 'GET', url: 'map-display',
success: function(d) { $('#a').html(d); }
})
});
});
</script>
<button>Call</button>
<div id="a"></div>
</body>
</html>
Dzięki za pomoc.
ajax
google-maps-api-3
bardziej zielony
źródło
źródło
Wiem, że ta odpowiedź nie jest bezpośrednio związana z problemem tego pytania, ale w niektórych przypadkach problem „Uncaught ReferenceError: google is not defined” wystąpi, jeśli plik js jest wywoływany przed używanym przez Ciebie interfejsem API Google Maps ... więc NIE ROBIĆ tego:
<script type ="text/javascript" src ="SomeJScriptfile.js"></script> <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>
źródło
Chyba inicjalizujesz coś przed funkcją inicjalizacji:
var directionsService = new google.maps.DirectionsService();
Przenieś to do funkcji, aby nie próbowała go wykonywać przed załadowaniem strony.
var directionsDisplay, directionsService; var map; function initialize() { directionsService = new google.maps.DirectionsService(); directionsDisplay = new google.maps.DirectionsRenderer();
źródło
Uncaught ReferenceError: Google is not specified. Błąd zniknie po usunięciu opóźnienia asynchronicznego z tagu map API script.
źródło
Po wykonaniu wszystkich Twoich obejść zadziałało dla mnie wywołanie interfejsu API:
<script async defer src="https://maps.googleapis.com/maps/api/js?key=you_API_KEY&callback=initMap&libraries=places" type="text/javascript"></script>
przed moim:
<div id="map"></div>
Używam .ASP NET (MVC)
źródło
Dla mnie
Dodanie tej linii
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
Przed tą linią.
<script id="microloader" type="text/javascript" src=".sencha/app/microloader/development.js"></script>
pracował
źródło
Może nie mieć znaczenia dla wszystkich, ale ten mały szczegół powodował, że mój nie działał:
Zmień div z tego:
<div class="map">
Do tego:
<div id="map">
źródło
Może używając
<body onload="initialize();">
zamiast
$(function(){ initialize(); });
może Ci pomóc.
źródło