javascript - 为什么 db.transaction 不能与 indexeddb 一起使用?

标签 javascript indexeddb

我刚开始使用 inxededdb,正在尝试从存储中获取数据。存储包含数据,但由于某种原因,代码在尝试设置 var tx 后停止。如果我遗漏了什么,请告诉我。这是我试图获取这本书的功能:

function getBook(){
    var tx = db.transaction("book", "readonly");
    var store = tx.objectStore("book");
    var index = store.index("by_getid");

    var request = index.get("<?php echo $_GET['book'] ?>");
    request.onsuccess = function() {
      var matching = request.result;
      if (matching !== undefined) {
         document.getElementById("text-container").innerHTML = matching.text;
      } else {
        alert('no match');
        report(null);
      }
    };
}

已解决的版本:

function getBook(){
  var db;
  var request = indexedDB.open("library", 1);  

  request.onsuccess = function (evt) {
    db = request.result; 
    var transaction = db.transaction(["book"]);
    var objectStore = transaction.objectStore("book");
    var requesttrans = objectStore.get(<?php echo $_GET['book'] ?>);

    requesttrans.onerror = function(event) {

    };

    requesttrans.onsuccess = function(event) {
      alert(requesttrans.result.text);
    };      
  };
}

最佳答案

问题可能出在您的 db 变量上。您可能正在访问连接对象的已关闭或空实例。

尝试在函数内部创建数据库连接。不要使用全局数据库变量。

关于javascript - 为什么 db.transaction 不能与 indexeddb 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22148299/

相关文章:

javascript - 无效状态错误 : Failed to execute 'transaction' on 'IDBDatabase' : The database connection is closing with ios safari

javascript - 在另一个 jquery 事件完成后播放声音

javascript - Angular 2 : How to tell SystemJS to use a bundle?

javascript - 错误 : indexedDB, 准备将 Blob/文件存储在对象存储中时出错

javascript - IndexedDB:如何重新播种/重置自动增量键为 0(或 1)

javascript - 检查并增加 IndexedDB 的版本号。

javascript - onsuccess 和 oncomplete 回调不适用于 indexedDb 添加事务

用于客户端存储和服务器端同步的 javascript 库

php - 如何使用 JavaScript 将 <tr> 的背景颜色更改为一种颜色,然后再恢复为默认颜色?

javascript - 访问 div 元素