0

关于在同一脚本中创建各种 IndexedDB objectStores 的最佳方法是什么?我创建了两个对象库:

var opinionObjectStore = thisDb.createObjectStore("opinion", {keyPath: "id", autoIncrement: false});
var commentObjectStore = thisDb.createObjectStore("comment", {keyPath: "id", autoIncrement: false});

然后我打开一个事务并获取两个对象存储:

var transo = myDataBase.transaction(["opinion", "comment"], "readwrite");
var opinionsObjectStore = transo.objectStore("opinion");
var commentsObjectStore = transo.objectStore("comment");

然后我创建我的“需要存储”对象:

var comment = {id: "myid"};
var resp = commentsObjectStore.add(comment);
// other instructions [...]
var opinion = {};
opinion.id = tagElement.id;
var resp = opinionsObjectStore.add(opinion);

我得到一个例外:

DataError: Data provided to an operation does not meet requirements.
[Break On This Error]
var resp = commentsObjectStore.add(comment);

你能帮我让我添加我的评论并且不要抛出异常吗?

在 indexedDB 中添加数据时,我已经阅读了DOM IDBDatabase 异常 5,并且在尝试将数据添加到 indexedDB 时出现错误“提供给操作的数据不符合要求”,这无济于事。

4

3 回答 3

0

DataError是关键错误。所以一定是您没有提供密钥或密钥无效。

但是,从您的代码中,您提供了一个有效的密钥,它可能是密钥已经存在。在这种情况下,浏览器应该抛出ConstraintError. 它是哪个浏览器?

还要清除浏览器中的应用数据(IndexedDB 数据),然后重试。

于 2012-11-17T03:02:39.940 回答
0

也许试试我的 indexedDBViewer,用它你可以检查你的 indexeddb 结构+数据。也许有了这个,您可以找出问题所在。我认为这与评论的对象存储定义有关。也许您最初使用其他选项创建了对象存储,并且没有使用您现在提供的版本重新创建。

你可以在这里找到我的 indexeddbviewer ,在这里你可以找到一篇关于如何使用它的博文。如果您是 Visual Studio 开发人员,您还可以在 nugget 上搜索“indexedDBViewer”包。

于 2012-11-17T08:26:59.180 回答
0

发现问题:

tagElement.id;

如果 tagElement 是来自的 xml 节点:

liveXml.find('Comment').each(function(){
    var tagElement = $(this);

然后tagElement.id是未定义的,但tagElement.attr('id')已定义。jQuery 很重要!

于 2012-11-19T11:50:37.093 回答