-1
我在使用Javascript中的indexeddb API時遇到了一個奇怪的問題。下面的代碼生成在主題行錯誤:未捕獲錯誤:NotFoundError:DOM IDBDatabase異常8
var notesdisplay, db;
function initiate(){
notesdisplay = document.getElementById('notesdisplay');
var button = document.getElementById('save');
button.addEventListener('click', addobject);
var request = indexedDB.open('mydatabase');
request.addEventListener('error', showerror);
request.addEventListener('success', start);
request.addEventListener('upgradeneeded', createdb);
}
function showerror(e){
alert('Error: ' + e.code + ' ' + e.message);
}
function start(e){
db = e.target.result;
show();
}
function createdb(e){
var datababase = e.target.result;
var mystore = datababase.createObjectStore('notesTable', {keyPath: 'id'});
mystore.createIndex('searchNotes', 'id', {unique: false});
}
function addobject(){
var title = document.getElementById('notesbox').value;
var mytransaction = db.transaction(['notesTable'], "readwrite");
var mystore = mytransaction.objectStore('notesTable');
var request = mystore.add({id: title});
request.addEventListener('success', show);
document.getElementById('notesbox').value = '';
}
function show(){
notesdisplay.innerHTML = '';
var mytransaction = db.transaction(['notesTable']);
var mystore = mytransaction.objectStore('notesTable');
var myindex = mystore.index('searchNotes');
var newcursor = myindex.openCursor(null, "prev");
newcursor.addEventListener('success', showlist);
}
function showlist(e){
var cursor = e.target.result;
if(cursor){
notesdisplay.innerHTML += '<div>' + cursor.value.id + ' - ' + ' <input type="button" onclick="removeobject(\'' + cursor.value.id + '\')" value="remove"></div>';
cursor.continue();
}
}
function removeobject(keyword){
if(confirm('Are you sure?')){
var mytransaction = db.transaction(['notesTable'], "readwrite");
var mystore = mytransaction.objectStore('notesTable');
var request = mystore.delete(keyword);
request.addEventListener('success', show);
}
}
addEventListener('load', initiate);
當我運行這個從在Chrome我得到的錯誤在主題行。然而,當我從Firefox運行這個不同的錯誤(可能在同一行)。
-
[19:13:54.870] TypeError: db is undefined
雖然我是相當新的JavaScript,在我腦海裏的變量DB是啓動函數中定義如下:
function start(e){ db = e.target.result; show(); }
該方案是一個簡化版本我從書中獲得的一個例子。這隻有一個鍵/值對。
任何建議/指針可能是什麼問題將不勝感激。
非常感謝,
vnayak
我已經無法重現你的錯誤,請參閱http://jsbin.com/ulemat/2/edit在Chrome'版本26.0.1410.64 M',機會您是否使用過時的Chrome版本(Chrome在過去的實施中存在很多問題) –
我使用的Chrome版本是'版本26.0.1410.65',Firefox是'20.0'。它在幾天之後向我要求更新,原來的教程代碼我已經開始正常工作了。所以它可能是一個版本的東西... – user2280642