2013-04-14 140 views
-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

+0

我已經無法重現你的錯誤,請參閱http://jsbin.com/ulemat/2/edit在Chrome'版本26.0.1410.64 M',機會您是否使用過時的Chrome版本(Chrome在過去的實施中存在很多問題) –

+0

我使用的Chrome版本是'版本26.0.1410.65',Firefox是'20.0'。它在幾天之後向我要求更新,原來的教程代碼我已經開始正常工作了。所以它可能是一個版本的東西... – user2280642

回答

0

您的要求打開一個數據庫連接可以被阻塞。嘗試添加以下到您啓動功能

request.addEventListener('blocked', function() { console.log('blocked'); }); 
相關問題