【问题标题】:Cannot read property 'transaction' of undefined IndexedDB无法读取未定义 IndexedDB 的属性“事务”
【发布时间】:2019-05-23 22:03:12
【问题描述】:

我正在使用 IndexDB 创建用户的对象存储,但在尝试添加用户时,var request = db.transaction(['person'], 'readwrite') 行出现错误。

给出的错误是:

“未捕获的类型错误:无法读取属性‘事务’的 不明确的 添加时(test.js:32) 在 test.js:45"

我的脚本如下所示:

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();

任何帮助将不胜感激

【问题讨论】:

    标签: javascript indexeddb


    【解决方案1】:

    看起来您在调用add() 期间尝试访问db,但未初始化(请注意,对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; 变量 - 考虑删除其中一个。希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2019-05-27
      • 2023-03-26
      • 2020-11-18
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      相关资源
      最近更新 更多