作成時に、objectStoreに以下を正常に追加しました。
{ name: "John Doe", age: 21 }
私はオプションを使用しました:
{ keyPath: "id", autoIncrement: true }
そのレコードを見つけることができ、id = 1
が表示されます。ただし、以下でこのコマンドを実行すると、エラーがスローされます。
var store = db.transaction( [ "employees" ], "readwrite" ).objectStore( "employees" );
var request = store.put( { name: "John Doe", age: 32 }, 1 );
これはスローします:
DataError: DOM IDBDatabase Exception 0
誰かが何が悪いのか知っていますか?キーを間違って指定していませんか?
更新
IndexedDB仕様 は、2番目のパラメーターを許可する必要があることを示しています。
interface IDBObjectStore {
...
IDBRequest put (any value, optional any key);
...
};
ただし、機能しませんが、これは機能します:
store.put( { name: "John Doe", age: 32, id: 1 } );
それはそれを要求するバグです。私がまだ何か間違ったことをしているのでない限り。
エラーは( 完全なリストについてはここを参照 )を意味します:
操作に提供されたデータは要件を満たしていません。
オブジェクトストアはインラインキーを使用し、キーパラメータが提供されました。
keypath
を指定して、ストアに インラインキー を使用するように指示していますが、put
の2番目のパラメーターとしてアウトオブラインキーを指定したためです。失敗します。
Internet Explorer10でこの関数の興味深い動作に出会いました。
私はあなたのようなキー構成のシンプルなストレージを持っていました:
{ keyPath: "id", autoIncrement: true }
オブジェクトをその中に入れて、値undefinedを持つ変数として2番目の引数を渡そうとすると、DataError例外が発生します。 FirefoxとGoogle Chromeこのような奇妙な動作はありません。
IE10は、2番目の引数が定義されているかどうかをチェックするのではなく、実装で引数の長さをチェックしているようです。そのために多くの問題が発生したので、私の答えがIE10でこの例外に直面する他の人々の助けになることを願っています。
これが 例 です。