问老师一个关于onsuccess的问题
来源:3-3 indexDB(3)
学习plus
2020-10-23 20:44:16
# 具体遇到的问题
第一次没有表的时候刷新可以出现内容,但是再次刷新后,就不出现这个了,之前indexedDB.open的onsuccess方法可以理解,每次尝试打开,成功后自动执行。
但这里:
var requestNode = store.getAll();
requestNode.onsuccess
按道理,每次尝试获取全部数据成功后,不也应该自动执行吗,怎么就不运行了。
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果# 粘贴全部相关代码,切记添加代码注释(请勿截图)
在这里输入代码,可通过选择【代码语言】突出显示
2回答
同学你好, 由于表中已经添加过内容了,刷新页面的时候会再次使用add添加相同的数据,造成异常,导致无法显示内容。建议:已经存在表之后,可以去掉如下代码,再测试就可以了。
祝学习愉快~
学习plus
提问者
2020-10-23
补充代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <ul id="data"></ul> <script type="text/javascript"> var dataShow = document.querySelector('#data'); var request = indexedDB.open('testDB',8); request.onsuccess = function(){ console.log('数据库创建或打开成功') }; request.onerror = function(){ console.log('数据库读取失败') }; request.onupgradeneeded = function(){ console.log('数据库版本升级成功,当前版本号为' + this.result.version) this.result.createObjectStore('test1' + this.result.version,{autoIncrement:true}); this.result.createObjectStore('test2' + this.result.version,{keyPath:"id"}); } var json = [{ "id":322, "name":"Lan", "age":33 },{ "id":21, "name":"Sky", "age":21 },{ "id":340, "name":"Blue", "age":55 },{ "id":53, "name":"Tom", "age":15 },] setTimeout(function(){ var db = request.result; var transaction = db.transaction('test2' + request.result.version,'readwrite'); var store = transaction.objectStore('test2'+request.result.version); for(var i = 0; i < json.length; i++){ store.add(json[i]); } var requestNode = store.getAll(); requestNode.onsuccess = function(){ for(var i = 0; i < requestNode.result.length; i++){ var child = document.createElement('li'); child.innerHTML = '名字叫' + requestNode.result[i].name + ',今年' + requestNode.result[i].age + '岁。'; dataShow.append(child); } } },300); </script> </body> </html>