无法为indexeddb添加事务设置onsuccess回调

时间:2012-06-21 09:12:43

标签: indexeddb

我在indexeddb add transaction

之前设置回调函数时遇到问题
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的事件。我应该用它吗?我不这么认为

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

2 个答案:

答案 0 :(得分:2)

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

您不会将onsuccess回调添加到对象库,而是在objectStore上打开一个事务并为该事务添加一个侦听器。

对于使用索引和事务的工作示例,请查看this jsfiddle我最近正在使用另一个StackOverflower。*有关更复杂的示例,请参阅my IndexedDB library

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

答案 1 :(得分: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的键。