错误:Menubar.Status.js?t=1685088402102:42 Uncaught DOMException: Failed to execute 'createObjectStore' on 'IDBDatabase': The database is not running a version change transaction. at request.onsuccess 代码:// 打开或创建一个名为“myDatabase”的数据库并创建一个名为“myStore”的存储 let request = indexedDB.open('myDatabase', 1); request.onerror = function(event) { console.log('打开数据库出错!'); }; request.onupgradeneeded = function(event) { console.log('创建执行'); let db = event.target.result; // 创建一个名为“myStore”的对象存储 let store = db.createObjectStore('myStore', { keyPath: 'id' }); // 添加一个名为“name”的索引 store.createIndex('name', 'name', { unique: false }); }; request.onsuccess = function(event) { let db = event.target.result; if (!db.objectStoreNames.contains('myStore')) { let store = db.createObjectStore('myStore', { keyPath: 'id' }); // 创建一个名为“myStore”的对象存储 store.createIndex('name', 'name', { unique: false }); // 添加一个名为“name”的索引 } // 在“myStore”存储中添加一条记录 let transaction = db.transaction(['myStore'], 'readwrite'); let store = transaction.objectStore('myStore'); let data ={ id: 0, name: JSON.stringify(editor) }; let request = store.add(data); request.onsuccess = function(event) { console.log('数据已成功添加到存储中!'); }; transaction.oncomplete = function(event) { db.close(); }; };
时间: 2024-02-07 13:02:00 浏览: 82
根据代码和错误信息,可以看出这是一个关于 IndexedDB 的错误。IndexedDB 是浏览器提供的一种客户端存储数据的方式。错误信息显示,你尝试在没有版本更改事务的情况下创建一个对象存储。
在你的代码中,你在 `onupgradeneeded` 事件中创建了“myStore”对象存储,但在 `onsuccess` 事件中,你又检查了该对象存储是否存在,如果不存在则创建。这会导致在没有版本更改事务的情况下尝试创建对象存储,从而导致错误。
为了解决这个问题,你可以将 `onupgradeneeded` 和 `onsuccess` 中的代码合并到一个事件处理程序中,这样你就可以确保在正确的上下文中创建对象存储。例如:
```
let request = indexedDB.open('myDatabase', 1);
request.onerror = function(event) {
console.log('打开数据库出错!');
};
request.onupgradeneeded = function(event) {
let db = event.target.result;
// 创建一个名为“myStore”的对象存储
let store = db.createObjectStore('myStore', { keyPath: 'id' });
// 添加一个名为“name”的索引
store.createIndex('name', 'name', { unique: false });
};
request.onsuccess = function(event) {
let db = event.target.result;
let transaction = db.transaction(['myStore'], 'readwrite');
let store = transaction.objectStore('myStore');
let data = { id: 0, name: JSON.stringify(editor) };
let request = store.add(data);
request.onsuccess = function(event) {
console.log('数据已成功添加到存储中!');
};
transaction.oncomplete = function(event) {
db.close();
};
};
```
这段代码将 `onupgradeneeded` 和 `onsuccess` 的功能合并到了 `onsuccess` 事件中,确保在正确的上下文中创建对象存储。
阅读全文