为什么此IndexedDB put命令失败?错误:DataError:DOM IDB数据库异常0

wko9yo5t  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(2)|浏览(220)

创建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 } );

这是一个错误的要求。除非我仍然做错了什么。

bxgwgixi

bxgwgixi1#

错误表示(完整列表见此处):
提供给操作的数据不符合要求。
对象存放区使用内嵌索引键,并提供了key参数。
您正在指定指示存储使用in-line keyskeypath,但由于您指定了一个外部键作为put的第二个参数,因此它将失败。

bqujaahr

bqujaahr2#

我在Internet Explorer 10中遇到了此函数的有趣行为。
我有一个简单的存储,关键配置与您的类似:

{ keyPath: "id", autoIncrement: true }

当尝试将对象放入其中并将第二个参数作为变量传递时,其值为undefined,会引发DataError异常Firefox和Google Chrome没有这种奇怪行为
看起来,IE10在它的实现中检查参数的长度,而不是检查第二个参数是否被定义。我有很多问题,所以,我希望,我的回答可以帮助其他人,谁将面临这个例外在IE10。
这是一个example

相关问题