DBOpenRequest 事件不触发
DBOpenRequest events do not fire
我正在努力打开索引数据库。这是我的代码:
var db;
window.onload = function()
{
window.indexedDB = window.indexedDB || window.mozIndexedDB
|| window.webkitIndexedDB
|| window.msIndexedDB;
var DBOpenRequest = window.indexedDB.open("test", 1);
DBOpenRequest.onerror = function(event)
{
console.log("DBOpenRequest.onerror");
};
DBOpenRequest.onsuccess = function(event)
{
console.log("DBOpenRequest.onsuccess");
db = DBOpenRequest.result;
};
DBOpenRequest.onupgradeneeded = function(event)
{
console.log("DBOpenRequest.onupgradeneeded");
};
};
但 none 事件火了。所有 DBOpenRequest 属性都设置为空,除了 readyState 设置为“完成”并且结果设置为 IDBDatabase 对象。
这里缺少什么以便我可以通过 db 变量访问 indexdb?
好吧,首先,在 onsuccess 中,数据库来自事件,而不是原始对象:
db = event.target.result;
您很可能将此视为控制台错误。
您无需等待浏览器触发加载事件。 indexedDB 准备情况与 DOM 准备情况无关。您可以在全局范围内简单地调用 indexedDB.open,它最终会执行。
您可能不需要检查供应商前缀的语句。前缀通常已被删除。只需使用 window.indexedDB 并删除此语句。
您还应该监听被阻止的事件。当大约同时在多个选项卡中打开同一页面时,通常会触发此事件。当被阻止时,其他事件将不会触发。
行 db = DBOpenRequest.result
似乎正在将一个值(IDBDatabase 对象的实例)分配给一个在外部范围中定义的变量,该值仅在函数范围内有效它不再有效。这表明缺乏编写和使用异步代码的经验。在继续之前,您可能应该了解有关异步代码的更多信息。
我正在努力打开索引数据库。这是我的代码:
var db;
window.onload = function()
{
window.indexedDB = window.indexedDB || window.mozIndexedDB
|| window.webkitIndexedDB
|| window.msIndexedDB;
var DBOpenRequest = window.indexedDB.open("test", 1);
DBOpenRequest.onerror = function(event)
{
console.log("DBOpenRequest.onerror");
};
DBOpenRequest.onsuccess = function(event)
{
console.log("DBOpenRequest.onsuccess");
db = DBOpenRequest.result;
};
DBOpenRequest.onupgradeneeded = function(event)
{
console.log("DBOpenRequest.onupgradeneeded");
};
};
但 none 事件火了。所有 DBOpenRequest 属性都设置为空,除了 readyState 设置为“完成”并且结果设置为 IDBDatabase 对象。
这里缺少什么以便我可以通过 db 变量访问 indexdb?
好吧,首先,在 onsuccess 中,数据库来自事件,而不是原始对象:
db = event.target.result;
您很可能将此视为控制台错误。
您无需等待浏览器触发加载事件。 indexedDB 准备情况与 DOM 准备情况无关。您可以在全局范围内简单地调用 indexedDB.open,它最终会执行。
您可能不需要检查供应商前缀的语句。前缀通常已被删除。只需使用 window.indexedDB 并删除此语句。
您还应该监听被阻止的事件。当大约同时在多个选项卡中打开同一页面时,通常会触发此事件。当被阻止时,其他事件将不会触发。
行
db = DBOpenRequest.result
似乎正在将一个值(IDBDatabase 对象的实例)分配给一个在外部范围中定义的变量,该值仅在函数范围内有效它不再有效。这表明缺乏编写和使用异步代码的经验。在继续之前,您可能应该了解有关异步代码的更多信息。