我在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的事件。我应该用它吗?我不这么认为
不要问我'你能给错误部分吗?'因为根本没有错误
答案 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的键。