エラー「突然変異を許可しないデータベースで突然変異操作が試みられました。」 indexedDBでデータを取得するとき

StackOverflow https://stackoverflow.com/questions/7301064

  •  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"], ...) そのオブジェクトストアで作業したいからです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top