问老师一个关于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>