我是第一次使用IndexedDB而且我还在努力解决这个问题。 我(想想我)在页面上的IndexedDB中添加了项目,在下一页我需要检索它们。 这是代码的一部分:
var db;
const dbName = "biometricData";
const osName = "userdata";
var request = indexedDB.open(dbName, 1); /*Creazione del database*/
request.onsuccess = function(event) {
db = this.result; /*Salvo l'istanza del database al momento della crazione*/
alert ("Database creato");
updateBatteryData();
};
request.onerror = function(event) {
var error = request.error;
alert(error);
};
request.onupgradeneeded = function(event) {
/*Chiave di ricerca e creazione dell'objectstore*/
db = this.result;
alert("Upgrade Needed");
if(!db.objectStoreNames.contains(osName)) {
alert("Devo creare l'Object Store "+osName);
var objectStore = db.createObjectStore(osName, { keyPath: "id", autoIncrement:true });
objectStore.createIndex("student","student", {unique: false});
objectStore.createIndex("type","type", {unique: false});
}
};
这是首先创建数据库
function updateBatteryData() {
batteryData = {id:id,
student:matr,
type:6,
index:batteryDataIndex,
time:data["time"],
batteryLevel:data["batteryLevel"],
isCharging:data["isCharging"],
dischargingTime:data["dischargingTime"]};
var transaction = db.transaction([osName], "readwrite");
var objectStore = transaction.objectStore(osName);
var request = objectStore.add(batteryData);
request.onsuccess = function(event)
{
alert("salvato il primo valore di batteria");
}
}
然后我调用此函数将对象保存在DB中(当然所有这些值都未定义)。 此外,这始终是id = 1。
然后,在下一页上,我尝试检索数据。我以同样的方式打开数据库,然后我使用它:
var transaction = db.transaction([osName]);
var objectStore = transaction.objectStore(osName);
var request = objectStore.get(1);
request.onerror = function(event) {
alert("error");
};
request.onsuccess = function(event) {
alert("done");
alert(event.target.result.type);
};
问题是:如果我是第一次创建数据库,获取值,保存它们,然后在它没有做任何事情的下一页上检索它们,它表示值未定义。如果我第二次对已经创建的数据库做同样的事情,它实际上会找到数据。
我错过了什么?