[英]IDBDatabase.transaction is always null
我一直在关注Using IndexedDB页面。
加载页面后,我将创建/加载数据库。
window.App = window.App || {};
App.db = window.indexedDB.open("myapp", 1);
接下来,我为App.db
对象定义onerror
, onupgradeneeded
和onsuccess
。
在onupgradeneeded
,我创建了一个新的对象存储。
最后,由于已创建/加载数据库,因此Javascript会自动调用onsuccess
方法。 在这种方法中,我列出了App.db
的详细信息。
App.db.onsuccess = function(ev){
console.dir( App.db );
};
控制台显示,
readyState = "done"
result = IDBDatabase
transaction = null
我分别使用file:///, http:// localhost , http://myownserver.that.is.forwarded.to.127.0.0.1.from.domain.provider调用了该页面。
但问题仍然存在。 transaction
方法为null,我什么也做不了,开始任何事务。 有什么问题,我想念什么?
indexedDB.open
返回一个请求对象( IDBRequest
)。 因此,您的App.db
将保留该请求。
听起来您已经掌握了升级过程。
完成此操作后,将通过请求的result
属性返回连接对象( IDBDatabase
实例),然后在连接对象上使用transaction()
方法启动事务。 因此,您希望将自己的"success"
处理程序编写为:
App.db.onsuccess = function(ev){
var connection = App.db.result;
var tx = connection.transaction(stores, mode);
...
};
但是更常见的是将连接对象称为db
东西,并且在连接打开后无需保留请求,因此您可能要做的是这样的事情:
var openRequest = indexedDB.open("myapp", 1);
openRequest.onupgradeneeded = function(e) {
var db = openRequest.result;
db.createObjectStore(...);
...
};
openRequest.onsuccess = function(e) {
App.db = openRequest.result;
var tx = App.db.transaction(...);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.