在indexedDB中创建两个对象库并添加内容

时间:2012-11-16 16:31:59

标签: jquery indexeddb

关于What is the best way to create various IndexedDB objectStores within the same script?,我创建了两个对象库:

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

然后我打开一个事务并获取两个objectstore:

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);

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

我已经阅读了DOM IDBDatabase Exception 5 when adding data in indexedDBError "Data provided to an operation does not meet requirements" when trying to add data to indexedDB这些没有帮助的内容。

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

发现问题:

tagElement.id;

如果tagElement是来自:

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

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