6

私はこの簡単なサンプルコードを持っています:

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');
    };
  };
};

私はこれを取得しています:

ミューテーションを許可しないデータベースでミューテーション操作が試行されました。"コード:" 6

オンライン

var objectStore = transaction.objectStore('customers');

理解できません-私は何を間違えますか?

4

3 に答える 3

4

私は答えを見つけたと思います。oncomplete内のobjectStoreにアクセスするべきではありません。私は新しい取引をした後にそれをする必要があります。正しい方法はこれです:

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

于 2011-09-06T07:01:02.303 に答える
4

オブジェクトストアは、バージョン変更トランザクションでのみ作成または削除できます

参照:https ://developer.mozilla.org/en-US/docs/IndexedDB/IDBDatabase

于 2012-08-22T07:35:15.103 に答える
0

私はそのコードを試しませんでしたが、ドキュメントから判断すると、最初のパラメーターとして空のリストを渡すべきではありません。db.transaction()それはdb.transaction(["customers"], ...)、そのオブジェクトストアで作業したいからです。

于 2011-09-04T18:27:19.987 に答える