-1

我在 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] 类型错误:数据库未定义

虽然我对 Javascript 相当陌生,但在我看来,变量 db 是在 start 函数中定义的,如下所示:

函数开始(e){ db = e.target.result; 节目(); }

该程序是我从书中获得的示例的简化版本。这只有一个键/值对。

任何关于可能是什么问题的建议/指示将不胜感激。

非常感谢,

夫纳亚克

4

1 回答 1

0

您打开数据库连接的请求可能会被阻止。尝试将以下内容添加到您的启动功能

request.addEventListener('blocked', function() { console.log('blocked'); });
于 2013-04-19T18:34:08.427 回答