我有以下代码:
js load:
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?sensor=false"></script>
js功能:
<script type="text/javascript">
var get_location;
function get_google_latlng() {
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': 'iran'}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
window.get_location = results[0].geometry.location.lat();
} else {
window.get_location = status;
}
});
return window.get_location;
}
var lat = get_google_latlng();
alert(lat);
</script>
返回函数为undefined
window.get_location
命令也不起作用。
答案 0 :(得分:2)
您所遇到的是异步功能的问题。您没有立即使用地理编码方法的值,因为您正在进行ajax请求并且需要时间。典型的JavaScript新手。
回调和闭包是在编程JavaScript时让您的生活更轻松的技巧。我会建议你改变你的思维方式,这不再是turbo-pascal了。这是JavaScript。的异步即可。不要指望每个函数都能立即返回结果。
回调示例:
// Ugly global variable
var get_location;
// Even more ugly global function
function get_google_latlng(callback) {
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': 'iran'}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
window.get_location = results[0].geometry.location.lat();
} else {
window.get_location = status;
}
// Now you invoke the callback to notify that the results are ready
callback();
});
// This is absolutely unnecessary
return window.get_location;
}
get_google_latlng(function(){
// Only here we are sure the variable was actually written
alert(window.get_location);
});
最后一件事,永远不会永远地在“窗口”(JavaScript中的全局对象)下声明函数和变量,这是一种反模式,将来会给您带来麻烦。
请学习如何制作匿名函数。
答案 1 :(得分:0)
试试这段代码:
var get_location;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': 'iran'}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
get_location = results[0].geometry.location.d;
alert(get_location);
}
});
您的代码存在问题,首先执行警报,然后执行获取位置功能。</ p>