我正在将IndexedDB用于测试项目。这是一些示例代码:

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){

  };
  request.onupgradeneeded = function(event) {

     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) {

  };

我真正不明白的是,当我的请求对象运行onupgradeneeded而不是onsuccess时(假设当然没有错误)。当没有对象存储存在时是吗?还是在创建新的数据库版本时?

谢谢

最佳答案

据此:https://developer.mozilla.org/en-US/docs/IndexedDB/Using_IndexedDB?redirectlocale=en-US&redirectslug=IndexedDB%2FIndexedDB_primer您已经有了正确的答案:

更改数据库版本时会调用onupgradeneeded:从无数据库更改为第一个版本,从第一个版本更改为第二个版本...

每次您发出新请求时,就会调用onsuccess:即使数据库架构没有更改。

关于javascript - 什么时候以及为什么在indexedDB中调用onupgradeneeded方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12133306/

10-09 23:15