gpt4 book ai didi

javascript - IDBDatabase.transaction 始终为 null

转载 作者:行者123 更新时间:2023-12-02 15:14:47 25 4
gpt4 key购买 nike

我一直在关注页面Using IndexedDB .

加载页面时,我创建/加载数据库。

window.App = window.App || {};
App.db = window.indexedDB.open("myapp", 1);

接下来,我为 App.db 对象定义 onerroronupgradeneededonsuccess

onupgradeneeded 中,我创建了一个新的对象存储。

最后,由于创建/加载了数据库,Javascript 自动调用 onsuccess 方法。在此方法中,我列出了 App.db 的详细信息。

App.db.onsuccess = function(ev){
console.dir( App.db );
};

控制台显示,

readyState = "done" 结果 = 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将保留该请求。

听起来您已经掌握了升级过程。

完成后,连接对象(一个 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(...);
};

关于javascript - IDBDatabase.transaction 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34551257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com