创建objectStore时,我已成功地将以下内容添加到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 spec声明应允许第二个参数:
interface IDBObjectStore {
...
IDBRequest put (any value, optional any key);
...
};
然而,这不起作用,但这却起作用:
store.put( { name: "John Doe", age: 32, id: 1 } );
这是一个错误的要求。除非我仍然做错了什么。
2条答案
按热度按时间bxgwgixi1#
错误表示(完整列表见此处):
提供给操作的数据不符合要求。
对象存放区使用内嵌索引键,并提供了key参数。
您正在指定指示存储使用in-line keys的
keypath
,但由于您指定了一个外部键作为put
的第二个参数,因此它将失败。bqujaahr2#
我在Internet Explorer 10中遇到了此函数的有趣行为。
我有一个简单的存储,关键配置与您的类似:
当尝试将对象放入其中并将第二个参数作为变量传递时,其值为undefined,会引发DataError异常Firefox和Google Chrome没有这种奇怪行为
看起来,IE10在它的实现中检查参数的长度,而不是检查第二个参数是否被定义。我有很多问题,所以,我希望,我的回答可以帮助其他人,谁将面临这个例外在IE10。
这是一个example。