2016-09-22 55 views
1

我试图在IndexDB中打开两个对象并从输入值获取数据时遇到上述情况。请问任何人都可以告诉我错在哪里,这里是代码Uncaught TypeError:无法读取nullopenRequest.onupgradeneeded的属性'值'Indexeddb

openRequest.onupgradeneeded = function(e) {   

    var thisDB = e.target.result; 

    var tab1Create = thisDB.createObjectStore("users", {keyPath: "phone"}); 

var tab2Create = thisDB.createObjectStore("Friends", {keyPath: "frdphone"}); 

    db = e.target.result; 

var transaction = e.target.transaction; 
var phone = document.querySelector("#phone").value;   
var email = document.querySelector("#email").value; 
var frdphone = document.querySelector("#frdphone").value; 

var frdname = document.querySelector('#frdname').value;  

var friend = transaction.objectStore('Friends'); 
friend.add({ 
frdname:frdname, 
frdphone:frdphone 
}); 
var user = transaction.objectStore('users'); 
//Perform the add 
user.add({ 
    phone :phone, 
    email :email 
    }); 

回答

2

阅读错误消息:

Uncaught TypeError: Cannot read property 'value' of null

其中访问属性 '值'(在something.value代码)的失败,因为something为空。使用.value的唯一地方是document.querySelector()调用。所以其中之一没有返回结果,即空。

这与索引数据库无关 - 您使用的选择器与文档中的任何元素都不匹配。

+0

谢谢Joshua,修复空值我得到的错误“未捕获的DataCloneError:无法执行'IDBObjectStore'添加':一个对象无法克隆。”请问可能是什么问题? –

+0

没有更多的上下文很难说。这表明(如其所述)传递给'.add()'的对象无法被克隆。在给出的代码示例中,它看起来像传递包含字符串的对象,这应该很好。 –

+0

猜测:你是否改变了'var phone = document.querySelector(“#phone”)。value; 'var phone = document.querySelector(“#phone”);'?这意味着'电话'正在引用一个元素,并且元素不能被克隆。我建议你尝试'console.log(...)'或尝试其他调试方法来理解为什么代码没有达到你期望的水平。 –

相关问题