Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用自动增量时删除IndexedDB中的项_Javascript_Firefox_Indexeddb - Fatal编程技术网

Javascript 使用自动增量时删除IndexedDB中的项

Javascript 使用自动增量时删除IndexedDB中的项,javascript,firefox,indexeddb,Javascript,Firefox,Indexeddb,我正在努力实现这一点 在我尝试删除某个项目之前,一切正常 使用此选项: request.onupgradeneeded = function(event) { console.log("upgrade", event); db = event.target.result; console.log("db", db); if (!db.objectStoreNames.contains("chatBot")) { var obje

我正在努力实现这一点

在我尝试删除某个项目之前,一切正常

使用此选项:

request.onupgradeneeded = function(event) {
      console.log("upgrade", event);

      db = event.target.result;
      console.log("db", db);

      if (!db.objectStoreNames.contains("chatBot")) {
        var objectStore = db.createObjectStore("chatBot", {keyPath: "timeStamp", autoIncrement: true});
      }
    };
以及设置删除:

btnDelete.addEventListener("click", function() {
      var id, transaction, objectStore, request;

      id = document.getElementById("txtID").value;
      console.log("id", typeof id);

      transaction = db.transaction("people", "readwrite");
      objectStore = transaction.objectStore("people");
      request = objectStore.delete(id);
      request.onsuccess = function(evt) {
        console.log("deleted content");
      };
    }, false);
将项目添加到indexedDB没有问题,但由于某些原因,我无法理解为什么它不能删除项目

id
是一个字符串,
objectStore.delete(id)
是正确的实现

下面是一个例子


使用Firefox 18

由于您使用的是自动增量密钥,因此该密钥由用户代理生成。在FF和Chrome中,它是以1开头的整数。如果您提供有效的密钥并将
id
转换为整数,则代码运行正常。我测试了FF和铬(dartium)<根据IndexedDB API密钥定义,代码>'1'和
1
是不同的密钥

另一个问题是IndexedDB API设计。无论给定的键是否被删除,delete方法总是使用
undefined
作为事件处理程序的结果。因此,调试非常困难。我认为它至少应该返回已删除记录的数量

[编辑]模块代码:
[编辑…同时]请注意
+
,它将
字符串
转换为
整数


request=db.transaction(“人”,“读写”).objectStore(“人”).delete(+id)

由于您使用的是自动增量密钥,因此该密钥由用户代理生成。在FF和Chrome中,它是以1开头的整数。如果您提供有效的密钥并将
id
转换为整数,则代码运行正常。我测试了FF和铬(dartium)<根据IndexedDB API密钥定义,代码>'1'
1
是不同的密钥

另一个问题是IndexedDB API设计。无论给定的键是否被删除,delete方法总是使用
undefined
作为事件处理程序的结果。因此,调试非常困难。我认为它至少应该返回已删除记录的数量

[编辑]模块代码:
[编辑…同时]请注意
+
,它将
字符串
转换为
整数


request=db.transaction(“人”,“读写”).objectStore(“人”).delete(+id)

非常感谢。我不知道autoIncrement有这种特性。你能提供一个来源吗?我想更多地了解这些陷阱。。。这会节省我很多时间。再次感谢!!更新。我有相当广泛的indexeddb使用指南,它更多的是利用indexeddb api,而不是陷阱。特别是钥匙有很多有用的窍门。谢谢Kyaw Tun。。。我一直在尝试IndexedDB并收集我自己的信息,但似乎我可以从你得到的东西中学到很多!!非常感谢。我不知道autoIncrement有这种特性。你能提供一个来源吗?我想更多地了解这些陷阱。。。这会节省我很多时间。再次感谢!!更新。我有相当广泛的indexeddb使用指南,它更多的是利用indexeddb api,而不是陷阱。特别是钥匙有很多有用的窍门。谢谢Kyaw Tun。。。我一直在尝试IndexedDB并收集我自己的信息,但似乎我可以从你得到的东西中学到很多!!