2016-09-22 53 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(...)'或嘗試其他調試方法來理解爲什麼代碼沒有達到你期望的水平。 –

相關問題