Я читал очень похожую тему, но я не использую JQuery.
здесь проблема: я хочу, чтобы мой json полностью загрузился, прежде чем вызывать мою функцию. Я знаю, что я должен использовать обратный вызов, но я не знаю, почему мой мозг не может этого сделать.
здесь "json" (усеченный, потому что это не предмет):
{type: "robot", nom: "445250sup01", ville: "RENNES", departement: "35", region: "Ouest", …}
{type: "robot", nom: "445250sup02", ville: "PARIS", departement: "75", region: "Ile-de-France", …}
{type: "robot", nom: "445250sup13", ville: "ORLEANS", departement: "45", region: "Ouest", …}
Здесь вызов моей функции xhr и чтение json:
var getDatas = getXHR(), // xhr in another file
regions = {};
dateRange = [];
getDatas.open("GET", "./db/datas.json", true);
getDatas.send();
getDatas.onreadystatechange = function() {
if (getDatas.readyState === 4 && (getDatas.status === 200 || getDatas.status === 0)) {
var robotsList = JSON.parse(getDatas.responseText);
getRobotsDatas(robotsList);
}
};
function getRobotsDatas(robotList) {
for (var i = 0; i < robotList.length - 1; i++) {...}
Проблема в том, что последний объект никогда не загружается... Не могли бы вы помочь мне найти правильный способ сделать это, пожалуйста?
Заранее спасибо!
Предполагая, что robotsList
на самом деле представляет собой массив объектов (который не совсем ясен из вашего "json" фрагмента (который вообще не является json, если на то пошло)).
Вы можете взглянуть на то, как вы getRobotsDatas
велосипеде по массиву в функции getRobotsDatas
.
Вы делаете один цикл слишком мало. То есть
for (var i = 0; i < robotList.length - 1; i++)
должны быть либо
for (var i = 0; i < robotList.length; i++) // removed the - 1
или же
for (var i = 0; i <= robotList.length - 1; i++) // changed < to <=
По-моему, первый яснее.