2013-08-25 3 views
0

Я начинаю изучать javascript и возиться с gps. В настоящее время у меня возникают проблемы с определением функции.javascript asynchronous scoping

Код

$(document).ready(function() { 
    var lat, lng; 

    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(function (position) { 
      $(document).data('lat', position.coords.latitude); //undefined outside 
      lat = position.coords.latitude; //undefined outside 
      lng = position.coords.longitude; //undefined outside 
     }); 
    } 

    var coords = new google.maps.LatLng(lat,lng); //lat & lng are undefined 
}); 

проблема заключается в том, что любое значение я придаю в локальной области видимости функции, созванном getCurrentPosition не хранится. Что лучше всего подходит для решения этой проблемы. Я предполагаю, что это просто вернуть объект обратно, содержащий данные, но как именно я это делаю? Я пытался это сделать, но он все еще не работал

+8

Это не проблема с областью, это проблема времени. Проблема в том, что координаты не установлены до тех пор, пока не будет создана переменная «координаты» (геолокация является асинхронной) – geocodezip

+3

Посмотрите на http://stackoverflow.com/q/14220321/218196, чтобы понять проблему (даже подумал, что это об Ajax, это относится ко всем асинхронным ситуациям). –

ответ

3

Ну, я понял это благодаря двум комментариям выше. Проблема не проблема, а скорее асинхронная проблема. Обратитесь к stackoverflow.com/q/14220321/218196

$(document).ready(function() { 
    if (navigator.geolocation) { 
     navigator.geolocation.getCurrentPosition(success, error, { maximumAge: 75000 }); 
    } 

    function success(position) { 
     var coords = new google.maps.LatLng(
      position.coords.latitude, 
      position.coords.longitude); 
     initMap(coords); 
    } 

    function error(err) { 
     //coordinates of LA 
     initMap(new google.maps.LatLng(34,118)); 
    } 


    function initMap(coords) { 
     //logic here 
    } 
}); 
Смежные вопросы