关于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 indexedDB和Error "Data provided to an operation does not meet requirements" when trying to add data to indexedDB这些没有帮助的内容。
答案 0 :(得分:0)
DataError
是关键错误。所以一定是你没有提供密钥或密钥无效。
但是从您的代码中,您提供的是有效密钥,它可能是已存在的密钥。在这种情况下,浏览器应抛出ConstraintError
。它是哪种浏览器?
还要在浏览器中清除应用数据(IndexedDB数据),然后重试。
答案 1 :(得分:0)
也许尝试我的indexedDBViewer,你可以检查你的indexeddb结构+数据。也许有了这个,你可以弄清楚出了什么问题。我认为这与评论的对象存储定义有关。也许您最初使用其他选项创建了对象存储库,并且没有使用您现在提供的版本重新创建。
您可以找到我的indexeddbviewer here和here您找到关于如何使用它的博文。如果您是Visual Studio开发人员,还可以在块上搜索“indexedDBViewer”包。
答案 2 :(得分:0)
发现问题:
tagElement.id;
如果tagElement是来自:
的xml节点liveXml.find('Comment').each(function(){
var tagElement = $(this);
然后tagElement.id
未定义,但tagElement.attr('id')
已定义。 jQuery很重要!