【发布时间】:2022-01-04 16:47:57
【问题描述】:
我有一个从 API 中提取并在表格中显示结果的程序。应该发生的是每一行应该是不同的数据。但是,当它运行时,它添加了两次 ID 为 4 的数据,完全跳过了 ID 为 3 的数据。起初,我认为我一定是在 GET 请求中搞砸了。我去检查,结果它正在获取数据,但没有将其添加到表中。我移动了所有代码以添加到 for 循环内的表中,但发生了同样的问题。如果有任何用处,我正在使用 Tomcat 来处理 API。
附件是我用来向表中添加行的函数。
function addRow(tableName, rowData) {
for (var h = 0; h < rowData.length; h++) {
var ajaxRequest = new XMLHttpRequest();
ajaxRequest.onreadystatechange = function(){
if(ajaxRequest.readyState == 4){
if(ajaxRequest.status == 200){
let table = document.getElementById(tableName);
let row = table.insertRow(1);
var order = JSON.parse(ajaxRequest.responseText);
var cell0 = row.insertCell(0);
var cell1 = row.insertCell(1);
var cell2 = row.insertCell(2);
var cell3 = row.insertCell(3);
var cell4 = row.insertCell(4);
var cell5 = row.insertCell(5);
var cell6 = row.insertCell(6);
var cell7 = row.insertCell(7);
var cell8 = row.insertCell(8);
var cell9 = row.insertCell(9);
var cell10 = row.insertCell(10);
cell0.innerHTML = order.id;
cell1.innerHTML = order.name;
cell2.innerHTML = order.time;
cell3.innerHTML = order.type;
cell4.innerHTML = order.creamerAmount + " " + order.creamerType;
cell5.innerHTML = order.sugarAmount;
cell6.innerHTML = order.coffeeType;
cell7.innerHTML = order.teaType;
cell8.innerHTML = order.hotChocolateType;
cell9.innerHTML = order.smoothieType;
cell10.innerHTML = order.protein;
} else {
//I'm aware this is bad, not sure how to handle it otherwise though...
h--;
}
}
}
ajaxRequest.open('GET', 'http://localhost:13760/cafe/cafe/orders/' + rowData[h]);
ajaxRequest.send();
}
} ```
【问题讨论】:
-
由于hoisting,您的脚本中只有一个
ajaxRequest。不要使用旧的var,而是使用let和const -
那你为什么要发送
rowData.length请求而不是一次获得所有请求? -
@Andreas 我忘了在问题中提到这一点,rowData 是一个我可能应该重命名的数组,它获取所有需要放在桌面上的所有 id,一次全部获取它们而无需这导致了性能问题,使得整个事情几乎无法使用,因为它试图每秒执行数百个 GET 请求,其中许多是空的。
标签: javascript html ajax html-table