#javascript #indexeddb
#javascript #indexeddb
Вопрос:
почему у меня ошибка?
Мой код:
var idb = window.indexedDB || // Use the standard DB API
window.mozIndexedDB || // Or Firefox's early version of it
window.webkitIndexedDB; // Or Chrome's early version
var IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction;
var IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange;
var dbName='nameDb';
var idbRequest=idb.open(dbName,'4.67' /*,dbDescription */);
idbRequest.onsuccess=function (e) {
debugger
var db=e.target.result;
if (!db.objectStoreNames.contains('chat')){
co=db.createObjectStore('chat',{'id':100});
};
if (!db.objectStoreNames.contains('iam')){
co1=db.createObjectStore('iam');
};
};
idbRequest.onerror = function (e) {
debugger
};
Не удалось выполнить InvalidStateError: не удалось выполнить ‘createObjectStore’ в ‘IDBDatabase’: в базе данных не выполняется транзакция изменения версии. index.html:37
idbRequest.onsuccess
Комментарии:
1. «Що це за» — what does it mean? : D
2. Я понимаю, что все ваши комментарии ожидают этого 🙂
Ответ №1:
Вы не можете создать objectStore
onsuccess
метод in an. Вы можете сделать это только в upgradeneeded
событии.
Цитата из документов:
Когда вы создаете новую базу данных или увеличиваете номер версии существующей базы данных (указывая более высокий номер версии, чем вы делали ранее, при открытии базы данных),
onupgradeneeded
событие будет запущено. В обработчике для этого события вы должны создать хранилища объектов, необходимые для этой версии базы данных
Смотрите документацию.
Комментарии:
1. Что делать, если не удалось заполнить данные в onupgradeneeded?
2. Итак, должен ли я выполнить проверку данных в onsuccess, если данные недействительны, затем откройте db с более высокой версией, чтобы снова запустить onupgradeneeded?