Javascript 未捕获的TypeError:无法使用JSON读取未定义的属性“0”
我正在尝试创建一个传单标记的JS数组,但它一直告诉我标记[]数组的属性“0”未定义,我认为这是通过json_encode将PHP变量$data传输到JS var a[]时产生的问题,但我对此不确定 我正在使用Altervista,我试图用各种可能的方法解决这个问题 $sql=mysqli\u query$connection,从ritrovamento中选择*; 而$row=mysqli\u fetch\u row$sql { $data[]=$row; } 和控制台。logMarkers[1]给了我:Javascript 未捕获的TypeError:无法使用JSON读取未定义的属性“0”,javascript,arrays,json,leaflet,Javascript,Arrays,Json,Leaflet,我正在尝试创建一个传单标记的JS数组,但它一直告诉我标记[]数组的属性“0”未定义,我认为这是通过json_encode将PHP变量$data传输到JS var a[]时产生的问题,但我对此不确定 我正在使用Altervista,我试图用各种可能的方法解决这个问题 $sql=mysqli\u query$connection,从ritrovamento中选择*; 而$row=mysqli\u fetch\u row$sql { $data[]=$row; } 和控制台。logMarkers[
e {options: {…}, _latlng: M, _initHooksCalled: true}
options:
icon: e
options: {iconUrl: "images/digging.gif", iconSize: Array(2), iconAnchor: Array(2), popupAnchor: Array(2)}
_initHooksCalled: true
__proto__: v
__proto__: Object
_initHooksCalled: true
_latlng: M
lat: 45.255091
lng: 8.514025
__proto__: Object
__proto__: e
标记[0]和标记[2]也是如此。由于不增加i,所以有一个无限循环。在第二次迭代中,您会得到一个错误,因为没有j[1] for循环需要增加这两个变量,它应该测试j,因为它是您正在读取的数组的索引
for (i = 0, j = 0; j < a.length; j++, i += 3) {
Markers[i] = L.marker([a[j][0], a[j][1]], {icon: shovelIcon});
Markers[i + 1] = L.marker([a[j][0], a[j][1]], {icon: diggingIcon});
Markers[i + 2] = L.marker([a[j][0], a[j][1]], {icon: clickedIcon});
Markers[i].addTo(mymap);
}
这个物体到底是什么样子的?一个示例可以帮助您获得答案。i+3在for循环中应该做什么?这不应该是i=i+3吗?我不理解这个循环。i是指向标记的索引,而不是指向a的索引,那么为什么要将其与a.length进行比较呢?j是指向a的索引,所以应该将其与a.length进行比较。更正for循环中的增量,因为数组中只有一个元素,所以没有任何更改。注释不用于扩展讨论;这段对话已经结束。
e {options: {…}, _latlng: M, _initHooksCalled: true}
options:
icon: e
options: {iconUrl: "images/digging.gif", iconSize: Array(2), iconAnchor: Array(2), popupAnchor: Array(2)}
_initHooksCalled: true
__proto__: v
__proto__: Object
_initHooksCalled: true
_latlng: M
lat: 45.255091
lng: 8.514025
__proto__: Object
__proto__: e
for (i = 0, j = 0; j < a.length; j++, i += 3) {
Markers[i] = L.marker([a[j][0], a[j][1]], {icon: shovelIcon});
Markers[i + 1] = L.marker([a[j][0], a[j][1]], {icon: diggingIcon});
Markers[i + 2] = L.marker([a[j][0], a[j][1]], {icon: clickedIcon});
Markers[i].addTo(mymap);
}