我正在尝试使用for循环从我的API获取JSON数据。我遇到的问题(我认为)是for循环在移到下一个事务之前没有等待第一个数据事务,因为从服务器检索数据需要时间。但是,我认为on.load函数是这样工作的?
如果我将每个“ machineID”分别作为“ 41”或“ 43”运行,则可以正常工作。这是当我尝试遍历出现错误的列表时。任何帮助表示赞赏!
var activeMachines = ["41", "43", "45"]
var dict = {};
getData();
console.log(dict);
function getData(){
for(i = 0; i < activeMachines.length; i++){
var machineID = activeMachines[i]
var getAPIData = new XMLHttpRequest();
var url = 'http://127.0.0.1:8000/processes/apidata/' +machineID + '/';
getAPIData.open('GET', url);
getAPIData.send();
getAPIData.onload = function(){
var APIData = JSON.parse(getAPIData.responseText);
dict['temp' + machineID] = APIData[0].tempData;
dict['humid' + machineID] = APIData[0].humidData;
timeValue = String((APIData[0].dateTime));
dict['time' + machineID] = new Date(timeValue);
}
}
}
这将返回:
Uncaught SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at XMLHttpRequest.getAPIData.onload (dashboardScript.js:26)
console.log(dict)
仅返回activeMachines[2]
的字典值,这很奇怪吗?