db.transaction is not a function

db.transaction is not a function

<!DOCTYPE html>
<html>
<head>
	<title>indexedDB</title>
</head>
<body>
	<script type="text/javascript">
		var db=window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
		var request,result,version=2,
			dbName="testDB",
			osName="os1";
		function createDB(){
			request=db.open(dbName,version);
			request.onsuccess=function(){ 
				db=request.result; 
			}
			request.onerror=function(e){ 
				console.log(e.currentTarget.errormessage);
			}
			request.onupgradeneeded=function(){
				db=request.result;
				console.log('upgradeneeded');
				if(!db.objectStoreNames.contains(osName)){ 
					db.createObjectStore(osName,{autoIncrement:true});
				}
			}
		}
		createDB();
		//存入数据
		var data=[
		{ name:'史莱姆', id:'001', hp:3 },
		{ name:'小蝙蝠', id:'002', hp:5 },
		{ name:'小恶魔', id:'003', hp:9 }  
		];
		function addData(){
			var transaction=db.transaction(osName,"readwrite"),
				store=transaction.objectStore(osName);
			db.map(function(o){
				store.add(o);
			});
		}
		addData();
	</script>
</body>
</html>

不知道是哪写错了,明明和老师写的一样啊

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

4回答
woximiemie 2018-02-08 10:59:29
setTimeout(function(){
    addData();
        },500);

由于异步API原因,不能保证能够在addData方法调用前获取db对象(实际上获取db对象也比执行一条语句慢得多),所以用setTimeout延迟一下应该就可以解决问题了

小丸子爱吃菜 2018-01-30 17:27:26

http://img1.sycdn.imooc.com//climg/5a703a4f000190d209900360.jpg

应该是data调用map方法。

addData调用要在控制台去调用,然后去application处进行查看数据,不要再这里进行调用。

祝学习愉快!

嘘_别说话 2017-12-14 17:48:13

我建议你先跟着老师的代码写完,因为还会涉及后面的调用,写完整后,还是有问题,你到时发个全的,我拿源码给你对对。


  • 请问解决了吗?我也遇到了相同的问题,我仔细跟老师的代码比对过,没发现毛病啊。
    2018-01-29 20:12:03
  • 这个代码已经够全了,你直接在浏览器的“审查元素”里console下面调用一下就会出现这个错误。
    2018-01-29 20:13:24
  • 这个代码已经够全了,你直接在浏览器的“审查元素”里console下面调用一下就会出现这个错误。
    2018-01-29 20:13:37
嘘_别说话 2017-12-14 15:40:15

我对了一下 db.map(function(o)这写的就不一样,应该是data,你最好再跟着老师的代码对一下~

根据报错的提示,应该是db的定义有问题,这块你再好好检查下吧


  • 提问者 慕标4303546 #1
    是的,写错了,但我改成了data.map,还是有这个问题,db前面也用到了,都没问题,定义应该是没问题的。
    2017-12-14 16:14:30
  • 杰克不接客 回复 提问者 慕标4303546 #2
    db的织带对象发生变化,你console.log(db)一下,如果类型是IDBFactory则是不对的,老师的课程应该是被剪辑过的,有一个地方没有提到,我用以下代码解决了: function openDB(dbName){ if(!window.indexedDB){ window.alert("Your browser doesn't support a stable version of IndexedDB. Such and such feature will not be available."); }else{ var request = window.indexedDB.open(dbName); request.onerror = function(){ alert("Oops, failed to open the database! I couldn't tell you the reason..."); } request.onsuccess = function(){ db = request.result; } } }
    2018-02-01 22:15:06
  • 上传代码除了调用map方法,应该是data调用map方法问题,还有不要在代码中直接运行 addData(); 吆,在控制台进行相应方法的调用,该节按照老师课程讲课,是可以正常完成效果,所说“被剪辑过的,有一个地方没有提到”具体是那一点(可以提供具体时间点),以便更好的审核,祝学习愉快。
    2018-02-02 10:17:09
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
HTML5&CSS3进阶与常用框架 2018
  • 参与学习       315    人
  • 提交作业       136    份
  • 解答问题       626    个

如果你有H5、CSS3、JS基础,热爱前端并希望在前端应用方面不断进步,那就来吧,本路径为你带来的课程有HTML5进阶、CSS3进阶、JS面向对象、jQ基础、Less等,助你进一步提升前端开发技能

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师