Javascript 在indexedDB中检索失败
错误是从数据库检索对象失败。例外情况为例外情况0,即提供给运行部门的数据不符合要求。我想根据输入字段中提供的日期检索date、pre、post的对象值。还有一个错误是报告未定义。请帮忙Javascript 在indexedDB中检索失败,javascript,html,indexeddb,Javascript,Html,Indexeddb,错误是从数据库检索对象失败。例外情况为例外情况0,即提供给运行部门的数据不符合要求。我想根据输入字段中提供的日期检索date、pre、post的对象值。还有一个错误是报告未定义。请帮忙 <!DOCTYPE html> <html manifest="manifest.webapp" lang="en"> <head> <meta charset="utf-8"> <title>Diab</title> <
<!DOCTYPE html>
<html manifest="manifest.webapp" lang="en">
<head>
<meta charset="utf-8">
<title>Diab</title>
<!link rel="stylesheet" href="diab.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
</head>
<body>
<input type="date" id="date" >Date</input>
<input type="number" id="pre">Pre</input>
<input type="number" id="post">Post</input>
<button id="add">Add</button>
<button id="show">Show</button>
<script type="text/javascript" src="diab3.js"></script>
</body>
</html>
$(document).ready(function()
{
var db;
var openDb=function()
{
var request=indexedDB.open("diabetore2",2);
request.onsuccess = function()
{
console.log("DB created succcessfully");
db = request.result;
console.log("openDB done!!");
return db;
};
request.onerror=function(){
alert("could not open db");
};
request.onupgradeneeded = function()
{
var db= request.onsuccess();
console.log("openDB.onupgradeneeded function");
var store = db.createObjectStore("diab", {keyPath: 'date'});
var dateIndex = store.createIndex("date", "date",{unique: true});
// Populate with initial data.
store.put({date: "june 1 2013",pre:70,post:70});
store.put({date: "june 2 2013",pre:71,post:87});
store.put({date: "june 3 2013",pre:72,post: 76});
store.put({date: "june 8 2013",pre:73,post:75});
};
};
function getObjectStore(store_name,mode)
{
var tx=db.transaction(store_name,mode);
return tx.objectStore(store_name);
}
function addItems(date,pre,post)
{
console.log("addition to db started");
var obj={date:date,pre:pre,post:post};
var store=getObjectStore("diab",'readwrite');
var req;
try
{
req=store.add(obj);
}catch(e)
{
if(e.name=='DataCloneError')
alert("This engine doesn't know how to clone");
throw(e);
}
req.onsuccess=function(evt)
{
console.log("****Insertion in DB successful!!****");
};
req.onerror=function(evt)
{
console.log("Could not insert into DB");
};
}
function getItems(date)
{ var gdate=date;
console.log("retrieval started from db");
var store=getObjectStore("diab","readonly");
var index=store.index("date");
var request=index.get(gdate);
request.onsuccess=function()
{
var matching=request.result;
if(matching !== undefined)
{
//report(matching.pre,matching.post);
alert(matching.pre+ " , "+matching.post);
}else
console.log("match not found");
//report (null);
};
}
$("#add").click(function(){
console.log("addEventListeners called...");
console.log("add...");
var date=document.getElementById('date').value;
var pre=document.getElementById('pre').value;
var post=document.getElementById('post').value;
if(!date)
{
alert("required field missing..");
return;
}
addItems(date,pre,post);
});
$("#show").click(function(){
console.log("eventlistner called for retrieval..");
console.log("retrieve");
var date=$('date').val();
/*if(!date)
{
alert("required field missing..");
return;
}*/
getItems(date);
});
openDb();
//addEventListners();
//here();
});
迪亚卜
日期
之前
邮递
添加
显示
$(文档).ready(函数()
{
var-db;
var openDb=function()
{
var请求=indexedDB.open(“diabetore2”,2);
request.onsuccess=函数()
{
log(“成功创建数据库”);
db=请求。结果;
log(“openDB完成!!”;
返回分贝;
};
request.onerror=函数(){
警报(“无法打开数据库”);
};
request.onupgradeneeded=函数()
{
var db=request.onsuccess();
log(“openDB.onupgradeneeded函数”);
var store=db.createObjectStore(“diab”,{keyPath:'date'});
var dateIndex=store.createIndex(“日期”、“日期”{unique:true});
//用初始数据填充。
商店出售({日期:2013年6月1日,前:70,后:70});
商店出售({日期:2013年6月2日,前:71,后:87});
商店出售({日期:2013年6月3日,前:72,后:76});
商店出售({日期:2013年6月8日,前:73,后:75});
};
};
函数getObjectStore(存储名称、模式)
{
var tx=数据库事务(存储名称、模式);
返回tx.objectStore(商店名称);
}
功能附加项(日期、前、后)
{
log(“添加到数据库已启动”);
var obj={date:date,pre:pre,post:post};
var store=getObjectStore(“diab”,“readwrite”);
var-req;
尝试
{
req=存储添加(obj);
}捕获(e)
{
如果(e.name=='DataCloneError')
警报(“此引擎不知道如何克隆”);
投掷(e);
}
请求onsuccess=功能(evt)
{
console.log(“****在数据库中插入成功!!****”;
};
req.onerror=功能(evt)
{
console.log(“无法插入数据库”);
};
}
函数getItems(日期)
{var gdate=日期;
log(“从数据库开始检索”);
var store=getObjectStore(“diab”、“readonly”);
var指数=存储指数(“日期”);
var请求=index.get(gdate);
request.onsuccess=function()
{
var匹配=request.result;
如果(匹配!==未定义)
{
//报告(匹配前、匹配后);
警报(匹配.pre+”、“+匹配.post);
}否则
console.log(“未找到匹配项”);
//报告(空);
};
}
$(“#添加”)。单击(函数(){
log(“addEventListeners调用…”);
控制台日志(“添加…”);
var date=document.getElementById('date')。值;
var pre=document.getElementById('pre').value;
var post=document.getElementById('post')。值;
如果(!日期)
{
警报(“必填字段缺失…”);
返回;
}
附加项(日期、日期前、日期后);
});
$(“#显示”)。单击(函数(){
log(“调用eventlistner进行检索…”);
控制台日志(“检索”);
var date=$('date').val();
/*如果(!日期)
{
警报(“必填字段缺失…”);
返回;
}*/
获取项目(日期);
});
openDb();
//addEventListners();
//这里();
});
检索字段值可以通过id完成:(使用id时不要忘记#)
这可能会导致问题,因为您正在使用日期作为对象存储的键,因此在这种情况下,它需要是唯一的,并且属于以下类型之一:DOMstring、array、number of date。表示不接受未定义。美元('date')的值是多少。val();@Kristof Degrave nw i添加了console.log(“输入的日期为”+日期);但是我发现date变量中没有存储任何值,所以我认为这是问题的根源…如何解决问题???.plz help@Kristof Degrave..现在我在console.log中获取日期,因为输入的日期是:2013-03-06…我应该如何修改get items(date)中的语句我仍然得到错误:行var index=store.index(date)的DOM IDBdatabase异常8;我认为在将存储名称传递给事务处理方法时,必须将其放入数组中。@Kristof Degrave我不明白您的意思……我创建了一个全局var storeName=“diab”并以这种方式传递它。。var store=getObjectStore(storeName,'readonly');错误保持不变…帮助…我认为您必须将其作为var tx=db.transaction([store_name],mode)传递;如果我是正确的,则当我以var tx=db.transaction([store_name],mode]的形式传递事务时,需要将其范围作为数组传递…它显示意外的标记..我认为[]不应该是这种情况。。。如果不使用它,addItems函数工作得很好(尽管它也调用getObjectStore函数)…因此问题可能出在getItems函数本身。。
var date = $('#date').val();