2

このコードの何が問題なのかわかりません:

onupgradeneeded = function(){
  z = e.currentTarget.result.createObjectStore(
                       'record', 
                       {keyPath:'id',autoIncrement:true}
  );
  z.createIndex('book', 'book', {unique:false});
  z.createIndex('user', 'user', {unique:false});
}

次のコードを使用してオブジェクトストアにデータを入れようとすると:

db.transaction('record',IDBTransaction.READ_WRITE)
    .objectStore('record')
    .add({book:...,user:...})

次のエラー メッセージが表示されます。

Data provided to an operation does not meet requirements
4

1 に答える 1

2

createIndexトランザクション内setVersion(2011 年 12 月より前の仕様、現在のバージョンの Chrome と IE でサポート) およびonupgradeneeded最新の仕様のコールバックから呼び出す必要があります (現在は FF でのみサポートされていますが、IE10 以降のバージョンの Chrome は次のようにアップグレードされます)。これ)。

仕様の説明にcreateIndexは、表示されているエラーが表示される理由が示されています。

createIndex: このメソッドは、接続されたデータベースに指定された名前とパラメータを持つ新しいインデックスを作成して返します。この関数が VERSION_CHANGE トランザクション コールバックの外部から呼び出された場合、実装は InvalidStateError 例外タイプの DOMException をスローする必要があります。

setVersionとの違いの詳細については、コードの変更について説明しているIE 関係者の投稿をonupgradeneededご覧ください。

于 2012-03-28T14:51:43.443 に答える