2

我在 indexeddb 添加事务之前设置回调函数时遇到问题

os = ...the object store (IDBObjectStore) object assigned here
os.onsuccess = function(){alert('dont mess with Messi')}
os.add({name:'Lionel Messi',team:'FC Barcelona',position:'striker',number:10});

该条目已成功添加到对象存储中,但不会触发 onsuccess 事件的函数。还有另一个事件称为 onerror。我应该改用它吗?我不这么认为

不要问我“你能给出错误部分吗?” 因为根本没有错误

4

2 回答 2

2

你以错误的方式处理你的请求。没有错误,因为您只是将onsuccess属性添加到永远不会调用它的对象。

您无需onsuccess向对象存储添加回调,而是在 上打开一个事务objectStore并为该事务添加一个侦听器。

有关使用索引和事务的工作示例,请查看我最近使用另一个 StackOverflower 完成的这个 jsfiddle。* 有关更复杂的示例,请参阅我的 IndexedDB 库

*请注意,此小提琴是针对旧的(2011 年 12 月之前)Chrome IDB 实现编写的。较新的 (FF) 实现将使用onupgradeneeded回调,但或多或​​少是相同的。

于 2012-06-22T02:45:01.333 回答
1

看起来您将处理程序分配给错误的对象,onsuccess、onerror、onabort 处理程序是由事务触发的,而不是对象存储本身,因此代码如下所示:

transaction = database.transaction([storeName], IDBTransaction.READ_WRITE);
 ..
 ..
os = transaction.objectStore(storeName);
transaction.oncomplete = function(e) { //do your stuff here } ;
os.add({ id : 1, name : 'John Doe'});

你能发布一个代码,你是如何获得对象存储的,我猜是从交易中获得的(不知道其他方法)。如果上面的代码有效,请告诉我。请注意,您插入的对象在创建对象存储时必须具有定义为 objectStore 键的属性。

于 2012-06-21T19:38:01.703 回答