IDBDatabase.transaction 始终为空
IDBDatabase.transaction is always null
我一直在关注页面 Using IndexedDB。
加载页面时,我 create/load 数据库。
window.App = window.App || {};
App.db = window.indexedDB.open("myapp", 1);
在这些之后,我为 App.db
对象定义了 onerror
、onupgradeneeded
和 onsuccess
。
在 onupgradeneeded
中,我创建了一个新的对象存储。
最后,onsuccess
方法被Javascript自动调用,因为数据库是created/loaded。在这个方法中,我列出了 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
returns 请求对象 (IDBRequest
)。所以你的 App.db
将保留请求。
听起来您掌握了升级过程。
完成后,连接对象(一个 IDBDatabase
实例)通过请求的 result
属性 返回,然后您使用 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(...);
};
我一直在关注页面 Using IndexedDB。
加载页面时,我 create/load 数据库。
window.App = window.App || {};
App.db = window.indexedDB.open("myapp", 1);
在这些之后,我为 App.db
对象定义了 onerror
、onupgradeneeded
和 onsuccess
。
在 onupgradeneeded
中,我创建了一个新的对象存储。
最后,onsuccess
方法被Javascript自动调用,因为数据库是created/loaded。在这个方法中,我列出了 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
returns 请求对象 (IDBRequest
)。所以你的 App.db
将保留请求。
听起来您掌握了升级过程。
完成后,连接对象(一个 IDBDatabase
实例)通过请求的 result
属性 返回,然后您使用 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(...);
};