我在Javascript中使用indexeddb API时遇到了一个奇怪的问题。下面的代码在主题行中生成错误:
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未定义
虽然我对Javascript还不熟悉,但在我看来,变量db是在start函数中定义的,如下所示:
function start(e){db = e.target.result;节目(); }
这个程序是我从一本书中获得的一个例子的简化版本。这只有一个键/值对。
对于可能出现什么问题的任何建议/指示都将不胜感激。
非常感谢,
vnayak
答案 0 :(得分:0)
您打开数据库连接的请求可能会被阻止。尝试将以下内容添加到您的启动功能
request.addEventListener('blocked', function() { console.log('blocked'); });