Google Haritalar API'si yalnızca AJAX kullanılırken "Yakalanmamış Referans Hatası: google tanımlı değil" mesajını atar


85

Bir haritayı görüntülemek için Google Maps API kullanan bir sayfam var. Sayfayı doğrudan yüklediğimde harita beliriyor. Ancak AJAX kullanarak sayfayı yüklemeye çalıştığımda şu hatayı alıyorum:

Uncaught ReferenceError: google is not defined

Bu neden?

Bu, haritanın bulunduğu sayfadır:

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

Ve bu AJAX çağrısının olduğu sayfa:

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

Yardımınız için teşekkürler.

Yanıtlar:


88

API varsayılan olarak yüklendikten sonra yüklenemez, asenkron olarak yüklemeniz gerekir.

sayfayı haritayla değiştirin:

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

Daha fazla ayrıntı için şu adrese bakın: /programming/14184956/async-google-maps-api-v3-undefined-is-not-a-function/14185834#14185834

Örnek: http://jsfiddle.net/doktormolle/zJ5em/


Teşekkürler! Şimdi çok mantıklı. Az önce bir takip yaptım: Haritam gri renkte geliyor (yine de Google logosu, bağlantısı ve kullanım şartları ile). Firebug'da karoların yüklendiğini görebiliyorum. Nedeni ne olabilir biliyor musunuz?
daha yeşil

Genellikle bu, zoom, mapTypeId veya center gibi eksik / geçersiz bir harita seçeneğinin bir sonucudur (tümü gereklidir, eksik olduklarında veya geçersiz bir değer atandığında, bir geri dönüş için varsayılan değer yoktur, harita
işlenemedi

1
Sorun, haritanın göründüğü div'i sakladığım gerçeğiyle ilgili. Burada bunun için ayrı bir sorum var: stackoverflow.com/questions/14263472/…
daha yeşil

39

Bu cevabın doğrudan bu soruların sorunuyla ilgili olmadığını biliyorum, ancak bazı durumlarda js dosyanız, kullandığınız google maps api'den önce çağrılıyorsa "Yakalanmamış Referans Hatası: google tanımlanmadı" sorunu ortaya çıkacaktır ... Öyleyse şunu YAPMAYIN:

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

google haritalarım api dahil kendi tanımladığım js'imin üstünde, yine de bu hatayı alıyorum ama her zaman değil. Bazen çok iyi yüklenir. Bu hatayı tuzağa düşürmem gerekiyor ama nedeninin ne olduğu hakkında hiçbir fikrim yok.
JkAlombro

@ JkAlombro referansı aşağıdaki bağlantıda cevap kabul edildi. Bence JScript kitaplık dosyalarınızın sırasına özellikle dikkat etmeniz gereken durumların çoğunu kapsıyor. Ayrıca, bu ileti dizisinin orijinal yanıtında önerildiği gibi, bunu daha iyi yönetmek için eşzamansız bağlantı kullanmayı da düşünebilirsiniz. stackoverflow.com/questions/4987977/…
Rex CoolCode Charles

8

Bir tahmin olarak, başlatma işlevinizden önce bir şeyi başlatıyorsunuz: var directionsService = new google.maps.DirectionsService();

Bunu işleve taşıyın, böylece sayfa yüklenmeden önce onu denemeyecek ve çalıştırmayacaktır.

var directionsDisplay, directionsService;
var map;
function initialize() {
  directionsService = new google.maps.DirectionsService();
  directionsDisplay = new google.maps.DirectionsRenderer();

5

Yakalanmamış ReferenceError: google tanımlı değil hatası, eşzamansız erteleme eşleme API komut dosyası etiketinden kaldırıldığında kaybolacak .


3

Tüm geçici çözümlerinizi uyguladıktan sonra benim için işe yarayan şey, API'yi çağırmaktı:

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

benim: <div id="map"></div>

.ASP NET (MVC) kullanıyorum


0

Benim için

Bu satırı ekleyerek

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>

Bu çizgiden önce.

<script id="microloader" type="text/javascript" src=".sencha/app/microloader/development.js"></script>

çalıştı


0

Herkes için geçerli olmayabilir ama bu küçük detay benim çalışmamasına neden oluyordu:

Div'i bundan değiştirin:

<div class="map">

Buna:

<div id="map">

-2

Belki kullanıyor

<body onload="initialize();">

onun yerine

$(function(){ 
     initialize();
});

size yardımcı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.