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

fkvaft9z  于 2022-12-09  发布在  IndexedDB
关注(0)|答案(3)|浏览(346)

我是一个使用inxeddb的新手,正在尝试从一个存储中获取数据。存储中包含数据,但是由于某种原因,代码在尝试设置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);
    };      
  };
}
twh00eeo

twh00eeo1#

问题可能出在您的db变量上。您可能正在访问一个已关闭或为空的连接对象示例。
请尝试在函数内部创建数据库连接。不要使用全局数据库变量。

5gfr0r5j

5gfr0r5j2#

index.get生成主键。您必须使用生成的主键获取记录值。

2uluyalo

2uluyalo3#

我的事务有问题,它是返回错误db.transaction is not a function或返回undefined。您可以尝试这样做,它对我有效:

const table = transaction.objectStore('list');
const query = table.getAll();
query.onsuccess = () => {
  const list = query?.result;
  console.log(list);
};

相关问题