2012-03-29 33 views
6

Tôi đang cố gắng để chơi với phạm vi js để kéo một biến ra khỏi navigator.geolocation.getCurrentPositionLưu biến bên ngoài navigator.geolocation.getCurrentPosition? (Javascript)

var lat; 
function callback (position) { 
    lat = position.coords.latitude; 
} 
navigator.geolocation.getCurrentPosition(callback,fail,{timeout:10000}); 
// after getCurrentPosition succeeds 
alert(lat); // this alerts null 

Đoạn mã trên không thể lưu trữ position.coords.latitude trong biến lat do phạm vi. Có cách nào để làm việc này không?

Trả lời

2

Bạn phải nhớ bản chất async \ ajax.

đây là trình tự thực hiện mã của bạn:

var lat; 
alert(lat); // this alerts null 
navigator.geolocation.getCurrentPosition(callback,fail,{timeout:10000}); 
function callback (position) { 
    lat = position.coords.latitude; 
} 

này tại sao bạn nhận được null. không đồng bộ!, không đồng bộ! :)

+0

tôi nhìn thấy, vì vậy vị trí .coords.latitude thực sự được lưu trữ trong lat? Nếu vậy, làm cách nào để chuyển dữ liệu trong lat sang biến khác? – Derek

+0

@Derek. bạn gọi hàm khác từ 'callback' với tham số' lat'. – gdoron

0

Bạn có thể lưu biến Vị trí của mình để nhập trường ẩn trên tài liệu sẵn sàng. Sau đó, bạn có thể sử dụng jQuery để lấy lại giá trị Định vị

javscript:

<script> 
var lat; 
alert(lat); // this alerts null 
navigator.geolocation.getCurrentPosition(callback,fail,{timeout:10000}); 
function callback (position) { 
    jQuery('#pos_lat').val(position.coords.latitude); 
} 
</script> 

HTML:

<input hidden id='pos_lat' value='' /> 
    //value = position latitude on load 

Để lấy lại giá trị:

jQuery('#pos_lat').val(); 
+0

Để đặt 'localStorage.setItem (" pos_lat ", position.coords.latitude);' để có được 'localStorage.getItem (" pos_lat ");' – San

Các vấn đề liên quan