2011-09-11 3 views
0

이 코드는 pos가 정의 된 후 언제든지 중단되면 작동합니다. 하지만 정상적으로 실행하면 아무 것도 표시되지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Google지도 API가 작동을 멈추었을 때 계속 작동합니다. 그렇지 않으면

function initialize() { 

    var pos; 

    if(navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function(position) { 

      pos = new google.maps.LatLng(position.coords.latitude, 
              position.coords.longitude); 
     }, function() { 
       handleNoGeolocation(true); 
      }); 
    } 
    else { // Browser doesn't support geolocation 
     handleNoGeolocation(false); 
    } 

    var myOptions = { 
     zoom: 7, 
     center: pos, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    var map = new google.maps.Map(document.getElementById("map_canvas"), 
             myOptions); 

} 

답변

1

getCurrentPosition(f, ...)은 비동기식입니다. 즉, 콜백 f이 요청을 성공적으로 완료 한 후에 호출됩니다. 그러나이 시점에서 함수 initialize()에있는 로컬 변수 pos은 더 이상 범위에 없습니다.

글로벌 창 범위에 pos을 정의하여 문제를 해결할 수 있습니다. 이 작업이 필요하며 pos은 콜백으로 할당됩니다. 그러나이 할당이 언제 발생하는지 알 수 없습니다. 이 문제를 해결하는 가장 좋은 방법은 pos을 콜백에서 직접 처리하는 것입니다 (예 : pos). 텍스트 필드에 쓰거나 데이터베이스에 저장하십시오.

0

API 호출에 약간의 시간이 걸리고 중단되면 필요한 데이터를 검색하는 데 약간의 시간이 걸리므로 표시 할 수 있습니까? 이것은 단순히 추측이지만 어떤 일이 발생하는지보기 위해 지연을 시도 할 수 있습니다.

1

흥미 롭습니다. 오류가 있습니까? 공유 할 수 있습니까? 디버깅을 위해 console.log()를 사용하고 try/catch 블록을 감싸고 싶을 수도 있습니다. 이전 브라우저에서 일부 문제가있을 수 있습니다.

+0

오류가 발생하지 않았습니다. 나는 또한 최신 사파리를 사용하고있다. Chrome에서도 동일한 문제가 발생합니다. 이상한. – Ferguzz

관련 문제