等待json在javascript

时间:2018-02-05 10:33:32

标签: javascript json callback xmlhttprequest

我读过very similar subject但我不使用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++) {...}

问题是永远不会加载最后一个对象...... 你能帮我找到合适的方法吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

假设robotsList实际上是一个对象数组(从你的&#34; json&#34;片段(根本就不是json)来说并不完全清楚。)

您可能希望了解一下您在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 <=

在我看来,第一个更清楚。