Ada*_*dam 6 javascript indexeddb
我用来IndexDB创建用户的对象存储,但在尝试添加用户时出现错误var request = db.transaction(['person'], 'readwrite')。
给出的错误是:
“未捕获的类型错误:无法在 test.js:45 处的 add (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();
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激
看起来您正在尝试在未初始化时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
};
Run Code Online (Sandbox Code Playgroud)
有多种方法可以解决此问题,但最简单的方法是将调用移至处理程序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
Run Code Online (Sandbox Code Playgroud)
最后,我注意到您声明了两个var db;变量 - 考虑删除其中之一。希望这可以帮助!