15

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

  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(假设当然没有错误)。是在没有对象存储的时候吗?或者当创建一个新的数据库版本时?

谢谢

4

1 回答 1

15

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

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

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

于 2012-08-26T20:01:35.247 回答