Google Maps API는 AJAX를 사용할 때만 "Uncaught ReferenceError : google is not defined"를 발생시킵니다.


85

Google Maps API를 사용하여지도를 표시하는 페이지가 있습니다. 페이지를 직접로드하면지도가 나타납니다. 그러나 AJAX를 사용하여 페이지를로드하려고하면 오류가 발생합니다.

Uncaught ReferenceError: google is not defined

왜 이런거야?

다음은지도가있는 페이지입니다.

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

그리고 이것은 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>

당신의 도움을 주셔서 감사합니다.

답변:


87

문서가 기본적으로로드를 마친 후에는 API를로드 할 수 없으므로 비동기로로드해야합니다.

지도로 페이지 수정 :

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

자세한 내용은 /programming/14184956/async-google-maps-api-v3-undefined-is-not-a-function/14185834#14185834를 참조하십시오.

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


감사! 이제 완벽하게 이해됩니다. 후속 조치가 있습니다. 내지도가 모두 회색으로 표시됩니다 (Google 로고, 링크 및 사용 약관 포함). Firebug에서 타일이로드되는 것을 볼 수 있습니다. 그 이유가 무엇인지 아십니까?
2013 년

일반적으로 이는 zoom, mapTypeId 또는 center와 같은 누락 / 잘못된지도 옵션의 결과입니다 (모두 필수, 누락되거나 잘못된 값이 할당 된 경우 대체에 대한 기본값이 없음,지도). ) 렌더링 할 수없는
Dr.Molle

1
문제는 내가지도가 나타나는 div를 숨기고 있다는 사실과 관련이 있습니다. 여기에 별도의 질문이 있습니다 : stackoverflow.com/questions/14263472/…
greener

38

이 답변이이 질문의 문제와 직접적인 관련이 없다는 것을 알고 있지만 사용중인 Google지도 API보다 먼저 js 파일을 호출하면 "Uncaught ReferenceError : google is not defined"문제가 발생하는 경우가 있습니다. 이렇게하지 마십시오 :

<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지도 API 포함은 내 자체 정의 js 위에 있지만 여전히이 오류가 발생하지만 항상 그런 것은 아닙니다. 때로는 잘로드됩니다. 이 오류를 잡아야하지만 원인이 무엇인지 모르겠습니다.
JkAlombro

@JkAlombro 참조는 아래 링크에서 답변을 수락했습니다. JScript 라이브러리 파일의 순서에 특히 관심을 가져야하는 대부분의 경우를 다룹니다. 이 스레드에 대한 원래 답변에서 제안한 것처럼 비동기 연결을 사용하여 더 잘 관리하는 것을 고려할 수도 있습니다. stackoverflow.com/questions/4987977/...
렉스 CoolCode 찰스에게

8

추측에 따르면 초기화 함수 전에 무언가를 초기화하고 있습니다. var directionsService = new google.maps.DirectionsService();

이를 함수로 옮기면 페이지가로드되기 전에 실행을 시도하지 않습니다.

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

5

Uncaught ReferenceError : google is not defined 오류는 map API 스크립트 태그에서 비동기 지연 을 제거하면 사라 집니다.


3

모든 해결 방법을 수행 한 후 저에게 도움이 된 것은 API를 호출하는 것입니다.

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

내 전에 : <div id="map"></div>

.ASP NET (MVC)을 사용하고 있습니다.


0

나를 위해

이 줄 추가

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

이 줄 앞에.

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

일했다


0

모든 사람과 관련이 없을 수도 있지만이 작은 세부 사항으로 인해 제 기능이 작동하지 않았습니다.

다음과 같이 div를 변경하십시오.

<div class="map">

이에:

<div id="map">

-2

어쩌면 사용

<body onload="initialize();">

대신에

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

당신을 도울 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.