2012-02-01 56 views
0

我想使用IndexedDB获取本地存储的一些数据。下面,我有我与我试图让一个简单的例子onupgradeneeded事件触发为什么在连接到indexedDB时我的onupgradeneeded回调从未被调用?

<html> 
    <head> 
    <script> 

     var indexedDB = window.indexedDB || window.webkitIndexedDB 
        ||window.mozIndexedDB||window.msIndexedDB; 

     var request = indexedDB.open("mydb",2),  

     customerData=[ 
     {ssn:"444-44-4444",name:"Bill",age:35,email:"[email protected]"},  
     {ssn:"555-55-5555",name:"Donna",age:32,email:"[email protected]"} 
     ]; 

     request.onerror = function(event){ 
     alert("ERROR") ; 
     }; 
     request.onupgradeneeded = function(event) { 
     alert("UPGRADE NEEDED") ; 
     var objectStore = db.createObjectStore("customers",{keyPath:"ssn"}); 
     objectStore.createIndex("name","name",{unique:false}); 
     objectStore.createIndex("email","email",{unique:true}); 

     for(var i in customerData){ 
      objectStore.add(customerData[i]); 
     } 
     } ; 
     request.onsuccess = function(e) { 
     alert("SUCCESS") ; 
     } ; 
    </script> 
    </head> 
</html> 

我试图改变的版本号,但无论我尝试onupgradeneeded不调用/解雇。任何建议为什么?

欢呼 卢卡

回答

5

我在FF 10中测试了它,它对我很有用。 (直到代码尝试使用未定义的“db”变量“)。

您使用的浏览器是什么?升级需要的事件仅在FF 10中引发。Chrome 16仍然使用旧草稿,您必须检查db .version属性并调用db.setVersion如果这不是你想要的。

如果使用FF10,你确定“mydb的”尚未创建?

此外,要确保你通过一个真正的web服务器来测试它,FF不会让你在本地HTML文件中使用indexedDB,如果发生这种情况,你应该看到一个错误:“操作失败,原因与数据库本身无关,并且没有被其他错误代码覆盖“在你的控制台中。

+0

检查,我从6.x升级到10和它现在工作正常! 我测试过这个东西之前在铬17,这是行不通的(也Safari /歌剧不工作) 谢谢! – 2012-02-14 20:06:16

1

你没有定义数据库变量

我有同样的问题......这是来自MDN的代码,并且他们没有解释如何更新数据库版本没有setVersion()函数

+1

我认为他们解释说,与“indexedDB.open(”mydb“,2)”你可以定义你的数据库版本。如果该版本与数据库版本不匹配,则调用“onupgradeneeded”。这是我的文档红色,听起来很逻辑,但它不工作:) – 2012-02-01 19:36:57

+0

我假设你通过获取数据库:var db = event.target.result;但是,因为onupgradeneeded从来没有被称为你不会得到一个错误 – 2012-02-02 16:38:19

+1

如果你将设法解决这个问题,这将是非常有用的,如果你将它张贴在这里... – jsbuster 2012-02-02 21:56:02

相关问题