2014-10-02 71 views
0

爲什麼我無法獲得此代碼的座標?無法從此代碼中獲取緯度和經度

錯誤是:ReferenceError: Can't find variable: card_Latitude

我把代碼從這裏:How to get longitude and latitude of a city/country inputted through an input box?

我不明白爲什麼。

<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> 
<script src="https://maps.googleapis.com/maps/api/js?sensor=false"></script> 
<script> 
    var card_FullAddress = "Canada"; 

    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 
     'address': card_FullAddress 
    }, function(results, status) { 
     if (status == google.maps.GeocoderStatus.OK) { 
      var card_Latitude = results[0].geometry.location.lat(); 
      var card_Longitude = results[0].geometry.location.lng(); 
     } else { 
      var card_Latitude = "ERR"; 
      var card_Longitude = "ERR"; 
     } 
    }); 

    console.log(card_Latitude); 
    console.log(card_Longitude); 
</script> 

JS FIDDLE

+1

因爲'card_Latitude'是** **本地的回調函數。如果你仔細觀察,你會注意到你把'console.log' *放在回調的外部。這是一個更簡單的例子:'function foo(){var bar = 42; };的console.log(巴);'。看起來你對異步代碼不熟悉,所以我推薦閱讀:http://stackoverflow.com/q/23667086/218196 – 2014-10-02 15:31:05

+1

'card_Latitude'存在於不同的範圍內。 – gdoron 2014-10-02 15:31:36

+0

那麼如何在外面訪問它呢?我試圖刪除'var',但同樣的錯誤。 – Bonito 2014-10-02 15:32:57

回答

0
var card_FullAddress = "Canada"; 

var geocoder = new google.maps.Geocoder(); 
geocoder.geocode({ 
    'address': card_FullAddress 
}, function(results, status) { 
    if (status == google.maps.GeocoderStatus.OK) { 
     var card_Latitude = results[0].geometry.location.lat(); 
     var card_Longitude = results[0].geometry.location.lng(); 

     //Lat and long are only available in this scope! continue your code here! 
     console.log(card_Latitude); 
     console.log(card_Longitude); 
    } else { 
     var card_Latitude = "ERR"; 
     var card_Longitude = "ERR"; 
    } 
}); 
+0

如果我需要,我如何在外面訪問它們? – Bonito 2014-10-02 15:39:05

+0

簡答題;你不能。你可以做的就是使用像[異步](https://github.com/caolan/async)這樣的庫來讓你的代碼更清晰並避免回調地獄。您應該Google for JavaScript異步代碼和谷歌/ StackOverflow回調更詳細的解釋。 – renatoargh 2014-10-02 15:42:11

+1

@Bonito:您可以在更高的範圍內聲明變量,例如在全球範圍內。異步代碼的問題不是範圍,而是時間。即使您將變量設置爲全局可用,您也不會在分配值時分配。你只知道什麼時候回調被調用。鑑於這種不確定性,將這些變量全球化並沒有多大用處。你真的應該花一些時間閱讀你對問題的評論中的所有鏈接,以更好地理解整個主題。 – 2014-10-02 15:42:13