为什么全局变量纬度和经度不受地理编码功能的影响?

时间:2015-09-24 12:26:46

标签: javascript google-maps global-variables

$(function() {
var lat = 41.9100711;
var lng = 12.535`enter code here`9979;  
var geocoder = new google.maps.Geocoder();
var address = "<?php echo $citta ?>";
geocoder.geocode( { 'address': address}, function(results, status) {
   if (status == google.maps.GeocoderStatus.OK)
   {
       // do something with the geocoded result
       //
       lat = results[0].geometry.location.lat();
       lng = results[0].geometry.location.lng();

   }
});
alert("latitudine"+lat);

我需要lat和lng这个插件,我需要在这里声明lat和lng,因为这就是为什么我要求使用globa变量来使用....以防任何其他想法从地址中找到lat和lng以用于此插件?

  

$(&#39;#地图容器&#39)。storeLocator({&#39; deafultlat&#39; =纬度,&#39; defaultlng&#39; = LNG});

1 个答案:

答案 0 :(得分:1)

变量已更改,但您的警报代码不在jQuery函数中:

$(function(){ /* your code */ })  
alert(lat + "/" + lng);

由于您在函数中使用 var ,因此它们不再是全局变量。你想要做的是,删除$()函数中的var语句,然后像这样写:

var lat, lng;
$(function(){
    // your current code.

})
// no alert here since lat/lng are empty when alert is called.

请注意JavaScript并发性,您的警报代码很可能在$()方法之前执行。这是因为$()是$(&#34; document&#34;)。ready()的简写,它将延迟调用,直到文档准备就绪。

尝试将警报放入地理编码器的回调中以解决此问题。

正下方设置lat / lng:

$(function() { 
    var lat = 41.9100711;
    var lng = 12.5359979;
    var geocoder = new google.maps.Geocoder(); 
    var address = ""; 
    geocoder.geocode({
        'address': address
    }, function(results, status) { 
         if (status == google.maps.GeocoderStatus.OK) { 
             // do something with the geocoded result // 
             lat = results[0].geometry.location.lat(); 
             lng = results[0].geometry.location.lng();
             alert("latitudine"+lat); // works!
         }
     }); 
});

要制作lat / lng真正的全局变量,你可以这样写:

window.lat = 0.0;
window.lng = 0.0;

// Now whenever you change window.lat, it's applied to all functions since window is already a global.

或者只在任何函数之外使用var来制作全局变量。

使用全局变量是不好的做法,只要你需要这些lat / lng就应该使用回调。