0

我正在尝试使用 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:"bill@company.com"},      
        {ssn:"555-55-5555",name:"Donna",age:32,email:"donna@home.org"}
      ];

      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 都不会被调用/触发。任何建议为什么?

欢呼卢卡

4

2 回答 2

5

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

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

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

此外,请确保您通过真实的 Web 服务器对此进行测试。FF 不允许您将 indexedDB 与本地 HTML 文件一起使用。如果发生这种情况,您应该会在控制台中看到类似“由于与数据库本身无关的原因导致操作失败且未被任何其他错误代码涵盖的原因”之类的错误。

于 2012-02-07T17:41:54.767 回答
1

您没有定义 db 变量

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

于 2012-02-01T16:52:53.563 回答