web-dev-qa-db-ja.com

このIndexedDBputコマンドが失敗するのはなぜですか?エラー:DataError:DOMIDBDatabase例外0

作成時に、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 } );

それはそれを要求するバグです。私がまだ何か間違ったことをしているのでない限り。

12
Don Rhummy

エラーは( 完全なリストについてはここを参照 )を意味します:

操作に提供されたデータは要件を満たしていません。

オブジェクトストアはインラインキーを使用し、キーパラメータが提供されました。

keypathを指定して、ストアに インラインキー を使用するように指示していますが、putの2番目のパラメーターとしてアウトオブラインキーを指定したためです。失敗します。

15
user1693593

Internet Explorer10でこの関数の興味深い動作に出会いました。

私はあなたのようなキー構成のシンプルなストレージを持っていました:

{ keyPath: "id", autoIncrement: true }

オブジェクトをその中に入れて、値undefinedを持つ変数として2番目の引数を渡そうとすると、DataError例外が発生します。 FirefoxとGoogle Chromeこのような奇妙な動作はありません。

IE10は、2番目の引数が定義されているかどうかをチェックするのではなく、実装で引数の長さをチェックしているようです。そのために多くの問題が発生したので、私の答えがIE10でこの例外に直面する他の人々の助けになることを願っています。

これが です。

3