Javascript Can';t从该代码中获取lat和lng
为什么我不能用这个代码得到坐标 错误为:Javascript Can';t从该代码中获取lat和lng,javascript,Javascript,为什么我不能用这个代码得到坐标 错误为:ReferenceError:找不到变量:card\u Latitude 我从这里获取代码: 我不明白为什么 <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> <sc
ReferenceError:找不到变量:card\u Latitude
我从这里获取代码:
我不明白为什么
<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>
var card_FullAddress=“加拿大”;
var geocoder=new google.maps.geocoder();
地理编码({
“地址”:卡的完整地址
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
var card_LATIONE=结果[0]。几何体。位置。纬度();
var card_longide=results[0]。geometry.location.lng();
}否则{
var卡_lation=“ERR”;
var card_Longitude=“ERR”;
}
});
控制台日志(卡片纬度);
控制台日志(卡片经度);
因为
卡纬度
是回调函数的本地值。如果仔细观察,您会注意到您将console.log
放在回调之外。下面是一个更简单的例子:函数foo(){var bar=42;};控制台日志(bar)代码>。您似乎不熟悉异步代码,因此我建议您阅读以下内容:card\u Latitude
存在于不同的作用域中。那么如何在外部访问它呢?我试图删除var
,但还是出现了同样的错误。另外:欢迎来到异步编程的世界。如果需要,我如何在外部访问它们?简短回答;你不能。相反,您可以使用一个lib来让代码更清晰,避免回调地狱。您应该在google/StackOverflow上搜索JavaScript异步代码和回调以获得更详细的解释。@Bonito:您可以在更高的范围内声明变量,例如在全局范围内。异步代码的问题不在于范围,而在于时间。即使您使变量全局可用,您也不会在变量赋值时使用它们。您只知道何时调用回调。鉴于这种不确定性,将这些变量设置为全局变量没有多大用处。你真的应该花些时间阅读你在问题评论中得到的所有链接,以便更好地理解整个主题。@Felix Kling是对的!即使在更高的范围内声明它们,在调用回调之前也无法正确填充它们的值back@Felix克林:谢谢你的澄清。
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";
}
});