这是一个非常简单的问题,但无法解决,即javascript中的变量范围,因为geoLocation值不起作用。这是我的代码:
<script type="text/javascript">
var glat;
var glng;
var test = "Hiii";
function call(){
var lat;
var lng;
var geocoder = new google.maps.Geocoder();
var address = "Delhi";
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.lat();
lng = results[0].geometry.location.lng();
}
glat = lat;
glng = lng;
alert("In: "+glat + glng+ "Test: "+test);
//All Values Displayed Fine..
});
alert("OUT: "+glat + glng+ "Test: "+test);
//glat and glng displayed as undefined..
}
</script>
为什么,OUT警告中的值不显示.. ??我该怎么解决这个问题..
先谢谢..
答案 0 :(得分:0)
因为geocoder.geocode([object],[callback]);
将一个函数作为第二个参数,它被称为异步:因此glat
和glng
变量不会被设置为请求完成,并返回回调函数。您的代码段的基本流程如下:
declare variables
declare function [call]
local variables for function
make async request
alert "out" + glat + glen //Just after request is sent, not after it's completed
[call] returns
//time passes
on successful completion of request://<--refs back to request set in [call]
set variables glat and glng
alert "In"
答案 1 :(得分:0)
获取地理信息是一个异步过程,您应该使用回调执行此类工作。
示例:强> 的
function call(address, callback) {
new google.maps.Geocoder().geocode({
'address': address
}, function (results, status) {
var lat, lng;
if (status == google.maps.GeocoderStatus.OK) {
lat = results[0].geometry.location.lat();
lng = results[0].geometry.location.lng();
}
callback(lat, lng);
});
}
//usage:
call("Delhi", function (glat, glng) {
// if you still get undefined, it means the status is not OK.
alert("OUT: " + glat + glng);
});