дождитесь завершения json в javascript

1

Я читал очень похожую тему, но я не использую 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++) {...}

Проблема в том, что последний объект никогда не загружается... Не могли бы вы помочь мне найти правильный способ сделать это, пожалуйста?

Заранее спасибо!

Теги:
callback
xmlhttprequest

1 ответ

0
Лучший ответ

Предполагая, что 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 <=

По-моему, первый яснее.

  • 0
    о да! Вы определенно правы !!!!! ... я думал, что я изменил цикл с: "for (var i = Things.length - 1; i> = 0; i--)" на "for (var i = 0 ; i> = Things.length; i ++) "! спасибо Соколиный Глаз! : D
  • 0
    @ user2940931, если это решит вашу проблему, было бы очень признательно, если бы вы могли пометить ответ как правильный :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню