【发布时间】:2019-10-10 16:18:40
【问题描述】:
我正在尝试创建一个传单标记的 JS 数组,但它一直告诉我 Markers[] 数组的属性 '0' 未定义,我认为这是将 PHP 变量 $data 转移到JS var a[] via json_encode,但我不确定。
我正在研究 Altervista,我试图以各种可能的方式解决问题。
$sql = mysqli_query($connection, "SELECT * FROM ritrovamento");
while($row = mysqli_fetch_row($sql))
{
$data[] = $row;
}
var a = <?php echo json_encode($data); ?>;
var Markers = [];
var Popups = [];
var j = 0;
var i = 0;
for(i = 0; i < a.length; i = 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);
j++;
}
Uncaught TypeError: Cannot read property '0' of undefined(这个错误出现在我试图将数据放入 Markers[i] 的地方)。
console.log(a) 给我:
[Array(5)]
0: Array(5)
0: "45.255091"
1: "8.514025"
2: "/images/bo.gif"
3: "wdqd"
4: "wd"
console.log(Markers[1]) 给了我:
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
Markers[0] 和 Markers[2] 相同。
【问题讨论】:
-
对象的真实样子是什么?一些示例将帮助您获得答案。
-
i + 3在for循环中应该做什么?不应该是i = i + 3吗? -
我不明白那个循环。
i是Markers的索引,而不是a的索引,那你为什么要把它和a.length比较呢? -
j是a的索引,因此您应该将其与a.length进行比较。 -
更正了 for 循环中的增量,没有任何变化,因为数组中只有一个元素。
标签: javascript arrays json leaflet