エラー「突然変異を許可しないデータベースで突然変異操作が試みられました。」 indexedDBでデータを取得するとき
-
22-10-2019 - |
質問
この簡単な例コードがあります:
var request = mozIndexedDB.open('MyTestDatabase');
request.onsuccess = function(event){
var db = event.target.result;
var request = db.setVersion('1.0');
request.onsuccess = function(event){
console.log("Success version.");
if(!db.objectStoreNames.contains('customers')){
console.log("Creating objectStore");
db.createObjectStore('customers', {keyPath: 'ssn'});
}
var transaction = db.transaction([], IDBTransaction.READ_WRITE, 2000);
transaction.oncomplete = function(){
console.log("Success transaction");
var objectStore = transaction.objectStore('customers');
};
};
};
私はこれを手に入れています:
突然変異を許可しないデータベースで突然変異操作が試みられました。 "Code:" 6
オンライン
var objectStore = transaction.objectStore('customers');
理解できません - 私は何を間違えますか?
解決 2
答えを見つけたと思います。 oncomplete内のオブジェクトストアにアクセスしてはなりません。新しいトランザクションを行った後に行う必要があります。正しい方法はこれです:
var transaction = db.transaction([], IDBTransaction.READ_WRITE, 2000);
transaction.oncomplete = function(){
console.log("Success transaction");
};
var objectStore = transaction.objectStore('customers');
ところで、これがMozillaのMDNが正確に示す方法です。 https://developer.mozilla.org/en/indexeddb/using_indexeddb#section_10
他のヒント
バージョンチェンジトランザクションでのみオブジェクトストアを作成または削除できます
見る: https://developer.mozilla.org/en-us/docs/indexeddb/idbdatabase
私はそのコードを試していませんでしたが、判断します ドキュメント 空のリストを最初のパラメーターとして渡すべきではありません db.transaction()
- むしろそうあるべきです db.transaction(["customers"], ...)
そのオブジェクトストアで作業したいからです。
所属していません StackOverflow