我使用IndexDB来创建用户的对象存储,但是当试图添加用户时,我在var request = db.transaction(['person'], 'readwrite')行上得到了一个错误。
给出的错误是:
“未定义的TypeError:无法读取未定义的属性‘在test.js:45的添加(test.js:32)’”
我的剧本是这样的:
var request = window.indexedDB.open("connectDB", 1);
request.onerror = function (event)
{
console.log('The database is opened failed');
};
var db;
request.onsuccess = function (event)
{
db = request.result;
console.log('The database is opened successfully');
};
var db;
request.onupgradeneeded = function (event)
{
db = event.target.result;
var objectStore;
if (!db.objectStoreNames.contains('users'))
{
objectStore = db.createObjectStore('users', { keyPath: 'id' });
objectStore.createIndex('name', 'name', { unique: false });
objectStore.createIndex('email', 'email', { unique: true });
}
}
function add()
{
var request = db.transaction(['person'], 'readwrite')
.objectStore('person')
.add({ id: 1, name: 'Jam', age: 24, email: 'jam@example.com' });
request.onsuccess = function (event) {
console.log('The data has been written successfully');
};
request.onerror = function (event) {
console.log('The data has been written failed');
}
}
add();如能提供任何帮助,将不胜感激。
发布于 2018-12-25 00:35:42
当db未初始化时,您似乎试图在调用add()期间访问它(请注意,对add()的调用是在执行脚本时立即发生的)。
但是,只有在成功创建数据库连接时才初始化db变量:
request.onsuccess = function (event)
{
db = request.result;
console.log('The database is opened successfully');
// It is now safe to interact with the database
};解决这个问题的方法有很多种,不过最简单的方法是将对add()的调用转移到onsuccess处理程序中,如下所示:
request.onsuccess = function (event)
{
db = request.result;
console.log('The database is opened successfully');
add(); // Add this
};
// add(); <-- remove this from the end of your script最后,我注意到声明了两个var db;变量--考虑删除其中一个变量。希望这能有所帮助!
https://stackoverflow.com/questions/53918546
复制相似问题