【汇总】解决IndexedDB报Failed to execute ‘transaction‘ on ‘IDBDatabase‘

问题发现

再学习HTML5 中,有介绍到 Web 存储,当代码编写完成后,运行报错

Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found.

示例代码如下:

html 复制代码
<!DOCTYPE html>
<html>
<head>
  <title>网页标题</title>
</head>
<body>
  <button onclick="addData()">添加数据</button>
  <button onclick="getData()">获取数据</button>
  <script>
    // 打开或创建数据库
    const request = window.indexedDB.open('myDatabase', 1);

    request.onupgradeneeded = function(event) {
      const db = event.target.result;

      // 创建一个对象存储空间
      const objectStore = db.createObjectStore('myObjectStore', { keyPath: 'id' });

      // 创建索引,可提高检索性能
      objectStore.createIndex('name', 'name', { unique: false });
    };

    request.onsuccess = function(event) {
      const db = event.target.result;

      function addData() {
        // 开启事务
        const transaction = db.transaction(['myObjectStore'], 'readwrite');
        const objectStore = transaction.objectStore('myObjectStore');

        const data = { id: 1, name: 'John Doe', age: 30 };

        // 添加数据
        const request = objectStore.add(data);

        request.onsuccess = function() {
          console.log('数据添加成功');
        };

        transaction.oncomplete = function() {
          console.log('事务完成');
        };

        transaction.onerror = function(event) {
          console.log('事务错误:', event.target.error);
        };
      }

      function getData() {
        // 开启只读事务
        const transaction = db.transaction(['myObjectStore'], 'readonly');
        const objectStore = transaction.objectStore('myObjectStore');

        // 检索数据
        const request = objectStore.get(1);

        request.onsuccess = function(event) {
          const data = event.target.result;

          if (data) {
            console.log('检索到的数据:', data);
          } else {
            console.log('未找到该数据');
          }
        };

        transaction.oncomplete = function() {
          console.log('事务完成');
        };

        transaction.onerror = function(event) {
          console.log('事务错误:', event.target.error);
        };
      }

      window.addData = addData;
      window.getData = getData;
    };

    request.onerror = function(event) {
      console.log('打开数据库失败:', event.target.error);
    };
  </script>
</body>
</html>

问题解决

先确认对象存储空间是否已经创建,名称是否正确。

方法一:添加版本号

javascript 复制代码
const request = window.indexedDB.open('myDatabase', 1);

如果版本设置为1不行,就设置为其他版本号(这是网上给出的解决方案,貌似没什么用)。

方法二:更换浏览器

默认情况下使用Chrome 浏览器,然后报此问题,更换为IE浏览器或其他浏览器,问题解决。

方法三:使用服务器运行

VS Code 中使用Live Server 插件运行html ,或者使用Tomcat

问题解决。

相关推荐
岳哥i3 小时前
vue鼠标单机复制文本
javascript
幻云20103 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
我即将远走丶或许也能高飞5 小时前
vuex 和 pinia 的学习使用
开发语言·前端·javascript
爱吃泡芙的小白白6 小时前
Vue 3 核心原理与实战:从响应式到企业级应用
前端·javascript·vue.js
码上成长7 小时前
JavaScript 数组合并性能优化:扩展运算符 vs concat vs 循环 push
开发语言·javascript·ecmascript
油丶酸萝卜别吃7 小时前
Mapbox GL JS 表达式 (expression) 条件样式设置 完全指南
开发语言·javascript·ecmascript
摘星编程8 小时前
用React Native开发OpenHarmony应用:timing定时动画参数
javascript·react native·react.js
JosieBook8 小时前
【Vue】12 Vue技术—— Vue 事件修饰符详解:掌握事件处理的高级技巧
前端·javascript·vue.js
摘星编程8 小时前
在OpenHarmony上用React Native实现AnimatedValue补间动画
javascript·react native·react.js
摘星编程8 小时前
React Native鸿蒙版:AnimatedXY双轴动画完整代码
javascript·react native·react.js