我正在尝试使用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的任何东西都不会被调用/触发。有什么建议吗?
欢呼声 卢卡
答案 0 :(得分:5)
我在FF 10中对此进行了测试,它对我有用。 (直到代码尝试使用未定义的“db”变量“。)
您使用的浏览器是什么?升级所需事件仅在FF 10中引发.Chrome 16仍然使用旧草稿,您必须检查db.version属性并调用db.setVersion,如果它不是您想要的。
如果您使用的是FF10,您确定还没有创建“mydb”吗?
另外,请确保您通过真实的Web服务器进行测试。 FF不允许您将indexedDB与本地HTML文件一起使用。如果发生这种情况,您应该会在控制台中看到类似“操作失败,原因与数据库本身无关且未被任何其他错误代码覆盖”的错误。
答案 1 :(得分:1)
您没有定义db变量
我遇到同样的问题......这是来自MDN的代码,他们没有解释如何在没有setVersion()函数的情况下更新数据库版本