我想把IDB中添加的字典的每个键的每个值追加到表的单元格中。
词典的添加方式如下:
var trans_write = data_base.transaction(["students"], "readwrite");
var petition_write = trans_write.objectStore("students");
var query = petition_write.add(dictionary);
data_base是触发onsuccess事件时存储e.target.result;
的全局变量
然后,我将同一个字典传递给一个函数,该函数将迭代来自同一个字典的每个键的值,这样我就可以将其值添加到一个单元格,然后将该单元格添加到一行,最后添加到主表:
function displayDataOnTable(dictionary) {
var trans = data_base.transaction(["students"], "readonly");
var query = trans.objectStore("students");
var cursor = query.openCursor();
cursor.addEventListener("success", function(e) {
var the_cursor = e.target.result;
if (the_cursor) {
var new_row = document.createElement("tr");
for (var key in dictionary) {
var cell_data = the_cursor.value.key;
var new_cell = document.createElement("td");
new_cell.append(cell_data);
new_row.append(new_cell);
}
table.append(new_row);
the_cursor.continue();
}
}, false);
}
正如你所猜测的,table是全局变量,它已经分配了一个HTMLTable,后者是通过它的id获得的:document.getElementById("idTable");
我遇到的问题是var cell_data = the_cursor.value.key;
行将cell_data
赋值为undefined
,并且for (var key in dictionary)
的迭代器key
引用了它,声明了它,但它从未被读取,所以这导致表中所有的单元格都是“undefined”。
有什么解决办法吗?最好的问候。谢谢。
更新#2(共享原始的完整代码,包括JS和HTML。英语不是我的主要语言,所以请原谅):
第一次
1条答案
按热度按时间trnvg8h31#
在将数据写入IndexedDB之前,无法从IndexedDB读取数据。很可能是在写入数据之前调用了
displayDataOnTable
。如果在数据存在之前查询数据,则会遇到您所描述的问题。如需更多说明,请提供呼叫写入程式码的程式码,并显示您呼叫写入程式码的时间、程式码中等待写入呼叫完成的位置,以及执行读取的位置。
请记住,IndexedDB的API使用非阻塞函数。如果您开始执行写操作,不要等待它完成(阻塞直到它完成),然后开始读操作,您将遇到争用条件。请搜索关键字“indexeddb”和“async”的问题以了解更多信息,或者搜索有关异步JavaScript的一般主题。