92 votes

L'API Google Maps déclenche le message "Uncaught ReferenceError : google is not defined" uniquement en cas d'utilisation d'AJAX.

J'ai une page qui utilise l'API Google Maps pour afficher une carte. Lorsque je charge la page directement, la carte apparaît. Cependant, lorsque j'essaie de charger la page en utilisant AJAX, j'obtiens l'erreur suivante :

Uncaught ReferenceError: google is not defined

Pourquoi ?

C'est la page avec la carte :

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

Et voici la page avec l'appel 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>

Merci pour votre aide.

93voto

Dr.Molle Points 61743

L'API ne peut pas être chargée après la fin du chargement du document par défaut, vous devrez la charger de manière asynchrone.

modifier la page avec la carte :

<div id="map_canvas" style="height: 354px; width:713px;"></div>
<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&callback=initialize"></script>
<script>
var directionsDisplay,
    directionsService,
    map;

function initialize() {
  var directionsService = new google.maps.DirectionsService();
  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);
}

</script>

Pour plus de détails, consultez le site : https://stackoverflow.com/questions/14184956/async-google-maps-api-v3-undefined-is-not-a-function/14185834#14185834

Exemple : http://jsfiddle.net/doktormolle/zJ5em/

40voto

Rex Charles Points 1139

Je sais que cette réponse n'est pas directement liée au problème de cette question mais dans certains cas le problème "Uncaught ReferenceError : google is not defined" se produira si votre fichier js est appelé avant l'api google maps que vous utilisez...donc NE FAITES PAS cela :

<script type ="text/javascript" src ="SomeJScriptfile.js"></script>
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp"></script>

11voto

Sohan Jangid Points 11

L'erreur Uncaught ReferenceError : google is not defined disparaîtra lorsque l'on supprimera l'application report asynchrone de la balise script de l'API de carte.

8voto

duncan Points 13751

A mon avis, vous initialisez quelque chose avant votre fonction initialize :

var directionsService = new google.maps.DirectionsService();

Déplacez-la dans la fonction, pour qu'elle n'essaie pas de l'exécuter avant que la page ne soit chargée.

var directionsDisplay;
var directionsService;
var map;

function initialize() {
  directionsService = new google.maps.DirectionsService();
  directionsDisplay = new google.maps.DirectionsRenderer();
}

4voto

Fotini Pipi Points 41

Ce qui a fonctionné pour moi après avoir suivi toutes vos solutions de contournement a été d'appeler l'API :

 <script async defer src="https://maps.googleapis.com/maps/api/js?key=you_API_KEY&callback=initMap&libraries=places"
            type="text/javascript"></script>

avant mon : <div id="map"></div>

J'utilise ASP NET (MVC).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X