javascript - 为什么在连接到 indexedDB 时我的 onupgradeneeded 回调从未被调用?

标签 javascript html indexeddb

我正在尝试使用 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>

我尝试更改版本号,但无论我尝试upgradeneeded 都不会被调用/触发。有什么建议吗?

干杯 卢卡

最佳答案

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

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

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

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

关于javascript - 为什么在连接到 indexedDB 时我的 onupgradeneeded 回调从未被调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9092762/

相关文章:

javascript - IndexedDB:检索具有最大值的项目

google-chrome - IndexedDB put/add 在 Chrome 中无提示失败(对于所有网站)

javascript - 使用 POST 提交按钮而不是使用 HTML 表单

html - 如何在屏幕截图中添加一些文本

带有子字符串的 Javascript 函数

javascript - JQuery 点击函数没有被调用

html - 如何居中水平表格单元格

javascript - 是否可以在 angular-localForage 中创建多个数据存储?

javascript - 如何使用 react 检查元素是否存在?

javascript - 在服务器端 Javascript 中写入文件