2014-02-18 2 views
0

나는 초보자이며이 스크립트가 작동하지 않는 것 같습니다.Google지도 Places API

Geolocation은 작동하지만로드되면 장소 마커가 표시되지 않도록 관리합니다. 많은 도움을 받으실 수 있습니까?

var map; 

    function initialize() { 
    var mapOptions = { 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
     zoom: 13 
    }; 
    map = new google.maps.Map(document.getElementById('map-canvas'), 
    mapOptions); 

    var input = document.getElementById('searchtxt'); 
    var autocomplete = new google.maps.places.Autocomplete(input); 

    autocomplete.bindTo('bounds', map); 
    if(navigator.geolocation) { 
    navigator.geolocation.getCurrentPosition(function(position) { 
     var pos = new google.maps.LatLng(position.coords.latitude, 
             position.coords.longitude); 

     map.setCenter(pos); 
    }, function() { 
     handleNoGeolocation(true); 
    }); 
    } else { 
    // Browser doesn't support Geolocation 
    handleNoGeolocation(false); 
    } 
    var request = { 
     location: pos, 
     radius: 1500, 
     types: ['restaurant'] 
    }; 
    alert('OK -> ' + request); //THIS DOESN'T SHOW. WHY?? 
    var service = new google.maps.places.PlacesService(map); 
    service.nearbySearch(request, callback); 
} 
function handleNoGeolocation(errorFlag) { 
    if (errorFlag) { 
    var content = 'Error: The Geolocation service failed.'; 
    } else { 
    var content = 'Error: Your browser doesn\'t support geolocation.'; 
    } 

    var options = { 
    map: map, 
    position: new google.maps.LatLng(60, 105), 
    content: content 
    }; 

    map.setCenter(options.position); 
} 


function callback(results, status) { 
    if (status == google.maps.places.PlacesServiceStatus.OK) { 
     for (var i = 0; i < results.length; i++) { 
      createMarker(results[i]); 
     } 
    } else { 
} 
} 

function createMarker(place) { 
    var placeLoc = place.geometry.location; 
    var marker = new google.maps.Marker({ 
    map: map, 
    position: place.geometry.location 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
    infowindow.setContent(place.name); 
    infowindow.open(map, this); 
    }); 
} 

google.maps.event.addDomListener(window, 'load', initialize); 

심지어 ALERT가 표시되지 않지만 var 요청 문 앞에 입력하면 "OK -> Undefined"로 표시됩니다.

무엇이 잘못 되었나요?

감사합니다.

+0

은 당신도 질문을 읽은 후 다시 확인 않았다 : 여기

내가 당신을 도울 수 a'while 다시 묻는 문제이다? – Phil

답변

0

getCurrentPosition()은 비동기 적으로 실행됩니다. 즉, var pos 변수가이 범위에 설정되지 않았습니다. 이 경우 pos은 정의되지 않습니다. var options 개체에 설정하려고하면 오류가 발생합니다. 이것은 코드를 깨고 결코 alert()는 해고되지 않습니다.

alert()은 잘못된 할당 인 location: pos,이 아직 발생하지 않았기 때문에 개체보다 먼저 작동합니다.

이 오류는 콘솔에 분명하게 표시되었으므로 이러한 방식으로 디버깅하는 것이 좋습니다. how to use/store JSON data after the callback has fired?

+0

감사합니다. Phil. 나는이 문제를 이해하고 그것을 시정하려고 노력할 것이다. 나는 진짜 자바 스크립트 초보자이고 그것을 배우려고 힘듭니다. var에 pos를 정의하여 나중에 코드에서 사용할 수 있습니다. 다시 한번 감사드립니다. – user3325414