我开始学习javascript并且正在摆弄gps。目前,我遇到了一个功能范围问题。
代码
$(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调用的函数的局部范围内赋值的值。处理此问题的最佳做法是什么。我假设它只是返回一个包含数据的对象,但我究竟是怎么做到的?我试过这样做,但它仍然无法正常工作
答案 0 :(得分: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
}
});