何时以及为什么在indexedDB中调用onupgradeneeded方法?

Joh*_*han 11 javascript html5 indexeddb

我正在使用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) {

  };
Run Code Online (Sandbox Code Playgroud)

我真的不明白的是当我的请求对象运行onupgradeneeded而不是onsuccess(假设当然没有错误).是不存在对象存储的时候?或者在创建新的db版本时?

谢谢

bpe*_*son 12

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

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

onsuccess 每次发出新请求时都会调用:即使数据库模式尚未更改.

  • 我不知道您是否熟悉其他数据库系统,但您应该将对象存储视为一个表.因此,如果要创建新的数据库模式,则会更改数据库模式.因此,您应该更改数据库的版本.因此,实现它的正确位置将在`onupgradeneeded`方法中. (3认同)