2016-10-03 77 views
2

我正試圖從數組中獲取具有for循環的值並將其插入到JSON url中。這是代碼。遍歷數組並將值插入到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數組中有值,所以這不是問題。有人能找到不合適的地方嗎?

+1

請顯示您的json –

+0

Json不是問題,當循環和Webid如何放入irk中時是有問題的。因爲它沒有這個工作。 @PradyutManna – llerdal

+0

在控制檯中的任何錯誤? @llerdal –

回答

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. 
}; 
0

這裏有一些事情正在進行。首先,我們不知道「datasetWebId」是什麼。這是你迭代發送每個AJAX請求的數組,但是如果它在一個之後退出,那麼它應該在運行之前保持這個長度,以確保它實際上具有迭代的數據。

二。你有3個(!)嵌套for循環。這並不令人震驚,這是一個奇怪的數據泄漏問題,因爲這是一個有點過度嵌套的主要症狀之一。不用擔心,我們都在那裏。將所有這些都放在可獨立測試的獨立函數中,然後開始一次一個地運行它們。而且,除非您確定AJAX的符號火災響應工作正常,否則不要做任何事情。

好的,你知道了。如果可以,請在該陣列上發佈更多信息,我很樂意通過清理解釋向您發送信息。