Uncaught TypeError: Невозможно прочитать свойство '0' из неопределенного, используя JSON - PullRequest
0 голосов
/ 10 октября 2019

Я пытаюсь создать JS-массив маркеров Leaflet, но он продолжает сообщать мне, что свойство '0' массива Markers [] не определено, я думаю, что это проблема, связанная с передачей переменной PHP $ data вJS var a [] через 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: Невозможно прочитать свойство '0' из неопределенного (эта ошибка возникает, когда я пытаюсь поместить данные в маркеры [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 (Маркеры [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

То же самое для Маркеров [0] и Маркеров [2].

1 Ответ

0 голосов
/ 10 октября 2019

У вас есть бесконечный цикл, так как вы не увеличиваете 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);   
}

Вот полный код. Я настроил содержимое массива Markers, потому что у меня нет функции L.marker(), но он все еще обращается к массиву a таким же образом.

var a = [
  ["45.255091", "8.514025", "/images/bo.gif", "wdgd", "wd"]
];

var Markers = [];
var j, i;
var mymap = [];

for (i = 0, j = 0; j < a.length; j++, i += 3) {
    Markers[i] = [[a[j][0], a[j][1]], {icon: "shovelIcon"}];
    Markers[i + 1] = [[a[j][0], a[j][1]], {icon: "diggingIcon"}];
    Markers[i + 2] = [[a[j][0], a[j][1]], {icon: "clickedIcon"}];
    mymap.push(Markers[i]);  
}

console.log(Markers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...