我试图从带有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数组中有值,因此不存在问题。有人可以发现不合适的东西吗?
答案 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的符号火灾响应正常工作之前,不要做任何事情。
好的,你有这个。如果可以,请在该阵列上发布更多信息,我很乐意通过清理后的解释向您发送。