为什么这个IndexedDB put命令失败了?错误:DataError:DOM IDBDatabase异常0

Don*_*mmy 11 html5 google-chrome indexeddb

我在创建它时已成功将以下内容添加到objectStore:

{ name: "John Doe", age: 21 }
Run Code Online (Sandbox Code Playgroud)

我使用了以下选项:

{ keyPath: "id", autoIncrement: true }
Run Code Online (Sandbox Code Playgroud)

我能够找到该记录,它显示了id = 1.但是,当我在下面运行此命令时,它会抛出一个错误:

var store = db.transaction( [ "employees" ], "readwrite" ).objectStore( "employees" );
var request = store.put( { name: "John Doe", age: 32 }, 1 );
Run Code Online (Sandbox Code Playgroud)

抛出:

DataError: DOM IDBDatabase Exception 0
Run Code Online (Sandbox Code Playgroud)

有谁知道什么是错的?我是否错误地指定了密钥?

更新

IndexedDB的规范指出,第二个参数应该被允许:

interface IDBObjectStore {
    ...
    IDBRequest put (any value, optional any key);
    ...
};
Run Code Online (Sandbox Code Playgroud)

但是,它不起作用,但这确实有效:

store.put( { name: "John Doe", age: 32, id: 1 } );
Run Code Online (Sandbox Code Playgroud)

这是一个需要的错误.除非我还在做错事.

小智 15

错误意味着(请参阅此处获取完整列表):

提供给操作的数据不符合要求.

对象存储使用内联键,并提供了键参数.

您指定的keypath是指示商店使用内联键,但是当您指定外键作为第二个参数时put,它将失败.

  • 没有密钥路径,是的,每个对象存储都有自己的密钥生成器.另见本文:http://www.kristofdegrave.be/2012/02/indexed-db-to-provide-key-or-not-to.html (3认同)