Похоже, вы хотите, чтобы каждая итерация имела отдельную привязку для participantID
и participantName
.Поскольку var
имеет область действия функции и поднимается, вы должны использовать const
или let
.Или, что еще лучше, полностью избегайте циклов for
и используйте forEach
, который не требует ручной итерации и имеет автоматическую абстракцию.Попробуйте что-то вроде этого:
const participantIDs = <?php echo json_encode($participantIDs) ?>;
const participantNames = <?php echo json_encode($participantNames)?>;
participantIDs.forEach((participantID, i) => {
const participantName = participantNames[i];
makeRequest('pageWithLocationInfo.php?participantID=' + participantID, function(response) {
const data = JSON.parse(response.responseText);
data.forEach(item => displayLocation(item, participantName));
});
});
Ужаснее решение было бы просто использовать let
в ваших циклах, который имеет область видимости блока (с которой легко взаимодействовать), а не область действия функции (с которой сложнее взаимодействовать):
var participantIDs = <?php echo json_encode($participantIDs) ?>;
var participantNames = <?php echo json_encode($participantNames)?>;
for (let i = 0; i < participantIDs.length; i++) {
const participantID = participantIDs[i];
const participantName = participantNames[i];
makeRequest('pageWithLocationInfo.php?participantID=' + participantID, function(dataR) {
const data = JSON.parse(dataR.responseText);
for (var j = 0; j < data.length; j++) {
displayLocation(data[j], participantName);
}
});
}
Не используйте одно и то же имя переменной индекса итерации для внутреннего и внешнего цикла;используйте разные имена.