2014-11-16 2 views
1

그래서 지난 몇 시간 동안이 문제가 발생했습니다. 탐색 객체를 사용하여 사용자의 위치를 ​​얻으려고합니다. 위도와 경도를 올바르게 가져올 수는 있지만 반환하고 Google Maps LatLng 객체의 변수로 사용하려고하면 undefined로 반환됩니다.변수가 navigator.geolocation.getCurrentPosition 외부에있을 때 undefined로 반환됩니다.

function getCurrentLat(){ 
    var lat 
    if(navigator.geolocation){ 

     navigator.geolocation.getCurrentPosition(function(position) { 
      lat = position.coords.latitude; 
      alert(lat); 
     }); 
     alert(lat); 
    }else{ 
     console.log("Unable to access your geolocation"); 
    } 
    return lat; 
} 

정확한 위도를 표시 할 getCurrentPosition 함수 내의 제 경고하지만 함수 외부 번째 하나로서 정의 나타낸다 : 여기

코드이다. 변수를 getCurrentPosition() 함수 외부에서 올바르게 표시하려면 어떻게합니까?

+0

'return lat; 대신 어쩌면'return (lat) ;; ... 어쨌든 무엇입니까? –

+0

오, 그건 오타였습니다. 반환 lat 사용; 뿐만 아니라 작동하지 않습니다. – Ajax413

답변

0

getCurrentPosition은 콜백을 사용하며이 함수 내에서 다른 내부 범위로 끝납니다 (즉시 실행할 수 없음). 그래서 당신이 할 수있는 유일한 방법은, 미래를 반환하거나 콜백에 걸릴 중 하나입니다 예 : getCurrentPosition도 실행할 수있는 기회가 없기 때문

function getCurrentLat(callback){ 
    if(navigator.geolocation){ 

     navigator.geolocation.getCurrentPosition(function(position) { 
      callback(position.coords.latitude); 
     }); 
    }else{ 
     console.log("Unable to access your geolocation"); 
    } 
} 

그렇지 않으면, lat가 정의되지 왜 아주 명확하다 함수가 종료 될 때까지 콜백을 호출하십시오.

+0

의미가 있습니다. 범위 문제 였다고 생각했습니다. 전달 방법을 알아 내지 못했습니다. 콜백 함수의 경우 정확히 getCurrentLat() 함수에 전달되는 것은 무엇입니까? 미안 콜백에 조금 익숙해 져서 콜백에서 값을 얻는 가장 좋은 방법은 100 % 확신 할 수 없습니다. getCurrentLat()의 반환 값을 position.coords.latitude로 설정할 수있는 방법이 있습니까? – Ajax413

+0

이 경우에는'position.coords.latitude'의 값이 전달됩니다. 예 : 'getCurrentLat (function (latitude) {alert ('위도가 '+ 위도');}) –

관련 문제