2013-06-20 72 views
0

我正在使用Firefox 21.我编写了下面的代码,以在页面加载时显示indexedDB对象存储的内容。IndexedDB事件不会触发

 window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || 
         window.msIndexedDB;  
     window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || 
         window.msIDBTransaction; 
     window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || 
         window.msIDBKeyRange; 

     var request = window.indexedDB.open('mgDB', 1); 
     request.onerror = function(e) { 
      alert('error'); 
     }; 

     request.onupgradeneeded = function(e) { 
      alert('upgradeneeded'); 
     }; 

     request.onsuccess = function(e) { 
      alert('success'); 
     }; 

由于知道mgDB尚不存在,我预计将触发upgradeneeded事件。当我使用Firebug调试代码时,发现错误,onsuccess和onupgrade需要空值,所以没有任何事件被触发。当我在没有调试模式的情况下执行代码时,我看到成功事件被解雇。有谁知道为什么会发生?

回答

2

onupgradeneeded不会触发这个事实是因为您已经多次运行该代码并且第一次创建了版本为1的数据库。 open函数的逻辑是,如果数据库不存在则创建数据库,如果数据库的版本低于提供的版本,则升级。 (请记住,indexeddb是持久性存储,这意味着如果关闭浏览器它不会被破坏)如果您想确保每次都要输入onupgrade需要(用于测试pupouses !!!),则可以先删除数据库再次打开/创建它。

事件为空的事实可能取决于您放置断点的位置?在其中一个回调中放置一个断点,您将看到onsuccess,onerror ......将被填充到请求对象上。

+0

对于需要删除数据库并在需要测试时重新启动的需求是正确的。让我详细说明我如何进行测试。昨天,当我开始测试的时候,我发现有几次这个事件发生了。然后,在每次测试之前,我手动删除了数据库,并且看到onsuccess事件持续发生。今天早上,我再次通过手动删除数据库并清除Firefox缓存+ cookie进行了测试,并且我看到onupgradeneeded和success事件都是一致的。 –

+0

就是这样,如果升级,onupgradeneeded会先被触发。在这里你可以编辑结构。完成此操作后,打开数据库连接,您可以开始使用它读取,插入,删除...数据。 –