迭代数组并将值插入JSON url

时间:2016-10-03 22:29:13

标签: javascript jquery arrays json

我试图从带有for循环的数组中获取值并将其插入到JSON url中。这是代码。

myConnector.getData = function(table, doneCallback) {
    datasetWebId.forEach(function(v) {
        var webId = (v);
        $.getJSON("https://www.twdc/api/" + webId + "/recorded?starttime=*-3d&endtime=*", function(resp) {

            tableData = [];
            resp.Items.forEach(function(item) {
                item.Items.forEach(function(subItem) {
                    tableData.push({
                        'name': item.Name,
                        'Timestamp': subItem.Timestamp,
                        'Value': subItem.Value,
                        'Path': item.Path
                    });
                });
            });

        });
        table.appendRows(tableData);
        doneCallback();
    });

};

当它运行时,它会击中第一个循环,然后跳过其余部分。 datasetWebId数组中有值,因此不存在问题。有人可以发现不合适的东西吗?

2 个答案:

答案 0 :(得分:2)

您在datasetWebId数组的第一项结尾处调用了doneCallback,这就是为什么它永远不会有另一次迭代。

myConnector.getData = function(table, doneCallback) {
    datasetWebId.forEach(function(v) {
        var webId = (v);
        $.getJSON("https://www.twdc/api/" + webId + "/recorded?starttime=*-3d&endtime=*", function(resp) {

        tableData = [];
        resp.Items.forEach(function(item) {
            item.Items.forEach(function(subItem) {
                tableData.push({
                    'name': item.Name,
                    'Timestamp': subItem.Timestamp,
                    'Value': subItem.Value,
                    'Path': item.Path
                });
            });
        });

    });
    table.appendRows(tableData);
  });
  doneCallback(); //This has been moved.
};

答案 1 :(得分:0)

这里有一些事情发生。首先,我们不知道" datasetWebId"是。这是您正在迭代发送每个AJAX请求的数组,毫无疑问,但是如果它在一个之后退出,那么在它运行之前应该console.log的长度,以确保它实际上有数据要迭代。

二。你有3(!)嵌套的for循环。它并不令人震惊,这是一个奇怪的数据泄漏问题,因为这是过度嵌套过多的主要症状之一。不用担心,我们都去过那里。将所有这些放在可以独立测试的单独函数中,并开始一次运行它们。并且,在确保AJAX的符号火灾响应正常工作之前,不要做任何事情。

好的,你有这个。如果可以,请在该阵列上发布更多信息,我很乐意通过清理后的解释向您发送。