Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图不显示标记的描述_Javascript_Php_Jquery_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 谷歌地图不显示标记的描述

Javascript 谷歌地图不显示标记的描述,javascript,php,jquery,google-maps,google-maps-api-3,Javascript,Php,Jquery,Google Maps,Google Maps Api 3,我想在单击标记时显示标题/说明。标记正在显示,但单击“说明”时未显示。我在控制台日志中看到错误消息是“UncaughtTypeError:无法读取第40行未定义的属性“0”,我不知道我的代码有什么问题,有人能帮我吗 var位置=[ [‘亚洲’,‘亚洲’], [“美国”,“美国”], [“印度”,“印度”] ]; var map=new google.maps.map(document.getElementById('map'){ 缩放:1, 中心:新google.maps.LatLng(0,0

我想在单击标记时显示标题/说明。标记正在显示,但单击“说明”时未显示。我在控制台日志中看到错误消息是“UncaughtTypeError:无法读取第40行未定义的属性“0”,我不知道我的代码有什么问题,有人能帮我吗

var位置=[
[‘亚洲’,‘亚洲’],
[“美国”,“美国”],
[“印度”,“印度”]
];
var map=new google.maps.map(document.getElementById('map'){
缩放:1,
中心:新google.maps.LatLng(0,0),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
var标记,i;
对于(i=0;i
#地图{
高度:400px;
宽度:500px;
}


为了理解它为什么不起作用,我们需要理解闭包是如何起作用的

闭包可以访问它自己的范围(在它的花括号中定义的变量),可以访问外部函数的变量,也可以访问全局变量

需要注意的重要一点是,即使在外部函数返回并存储对实际变量的引用之后,闭包也可以访问外部函数的变量

现在,在您的代码中,for循环在JavaScript中没有作用域,变量只声明一次

现在重要的是,异步代码在所有同步代码完成之前无法运行。因此,当getJSON回调运行时,因为它们在同一个变量i上有一个闭包,所以它们都使用当前值i,因为回调是在循环完成回调创建之后运行的

现在为了解决这个问题,我们可以使用一个新函数来运行它自己的作用域,这样在循环中的回调中,每个不同的值都有一个新的闭包

这是更新后的代码。修改了getJSON部分并添加了必需的闭包

var位置=[
[‘亚洲’,‘亚洲’],
[“美国”,“美国”],
[“印度”,“印度”]
];
var map=new google.maps.map(document.getElementById('map'){
缩放:1,
中心:新google.maps.LatLng(0,0),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
var标记,i;
对于(i=0;i
#地图{
高度:400px;
宽度:500px;
}


为了理解它为什么不起作用,我们需要理解闭包是如何起作用的

闭包可以访问它自己的范围(在它的花括号中定义的变量),可以访问外部函数的变量,也可以访问全局变量

需要注意的重要一点是,即使在外部函数返回并存储对实际变量的引用之后,闭包也可以访问外部函数的变量

现在,在您的代码中,for循环在JavaScript中没有作用域,变量只声明一次

现在重要的是,异步代码在所有同步代码完成之前无法运行。因此,当getJSON回调运行时,因为它们在同一个变量i上有一个闭包,所以它们都使用当前值i,因为回调是在循环完成回调创建之后运行的

现在为了解决这个问题,我们可以使用一个新函数来运行它自己的作用域,这样在循环中的回调中,每个不同的值都有一个新的闭包

这是更新后的代码。修改了getJSON部分并添加了必需的闭包

var位置=[
[‘亚洲’,‘亚洲’],
[“美国”,“美国”],
[“印度”,“印度”]
];
var map=new google.maps.map(document.getElementById('map'){
缩放:1,
中心:新google.maps.LatLng(0,0),
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infowindow=new google.maps.infowindow();
var标记,i;
对于(i=0;i