Javascript 在indexedDB中检索失败

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> <

错误是从数据库检索对象失败。例外情况为例外情况0,即提供给运行部门的数据不符合要求。我想根据输入字段中提供的日期检索date、pre、post的对象值。还有一个错误是报告未定义。请帮忙

<!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();