Javascript 删除方法不适用于索引DB HTML5。。。它返回success,但不会删除记录

Javascript 删除方法不适用于索引DB HTML5。。。它返回success,但不会删除记录,javascript,html,google-chrome,indexeddb,Javascript,Html,Google Chrome,Indexeddb,使用桌面Chrome,我在HTML5的索引数据库中遇到的另一个问题是,我无法从对象存储中删除记录。onsuccess事件已触发,但记录仍然存在。。。我的ID是一个时间戳,只是因为我想更快地实现一个可用的应用程序。我硬编码了它,但它仍然不起作用。这真的很奇怪,因为onsuccess事件被触发 代码中“执行”的部分如下所示: 试一试 { if (localDatabase != null && localDatabase.db != null) {

使用桌面Chrome,我在HTML5的索引数据库中遇到的另一个问题是,我无法从对象存储中删除记录。onsuccess事件已触发,但记录仍然存在。。。我的ID是一个时间戳,只是因为我想更快地实现一个可用的应用程序。我硬编码了它,但它仍然不起作用。这真的很奇怪,因为onsuccess事件被触发

代码中“执行”的部分如下所示:

试一试 {

        if (localDatabase != null && localDatabase.db != null) 
        {
            var store = localDatabase.db.transaction("patients", "readwrite").objectStore("patients");
            var request = store.delete("1384882073632");

            request.onsuccess = function(event) 
            {


                alert("Patient deleted from DB");
                update_patients_stored();

                aux1.value = "";
                aux2.value = "";
                aux3.value = "";
                aux4.value = "";

            };

            request.onerror = function(event) 
            {
                alert("Error deleting");
            };
        }
    }
    catch(e)
    {
        alert(e);
    }

提前谢谢!

我确信您删除到的键是错误的。请注意,数字、字符串和日期是不同的键,即使与==相比它们是相同的


IndexedDB返回成功,只要它不违反数据库约束。在这种情况下,不删除任何记录。我建议在删除请求时返回已删除记录的数量,但不受欢迎。当然,我的库ydn db也这样做了。

我发现了类似的问题。未删除行为,但启动了onsuccess事件。尽管存在密钥状态参数可以是任何类型,我解决了它,强制将参数转换为数字:

//My version
//I use default autoIncrement for keys
var objectStore = db.createObjectStore(objStoreName,{autoIncrement:true});
//appears to need a number for the key (but retrieved from HTML as string
var request = db.transaction(objStoreName,'readwrite')
                    .objectStore(objStoreName)
                    .delete(Number(parent.id));
    request.onsuccess = function(e) {
        console.log("element deleted"); //sadly this always run :-(
    }
所以你的第四行应该是:

var request = store.delete(1384882073632); //integer id
//rather than (WRONG):
//var request = store.delete("1384882073632"); //WRONG! string id
试穿:

Chromium--Manjaro Linux上的50.0.2661.94版(64位)


还没有在其他环境或浏览器上测试过它,但我猜这是您的问题。

尝试将密钥放入数组中

type IDBValidKey = number | string | Date | BufferSource | IDBArrayKey;

interface IDBArrayKey extends Array<IDBValidKey> {}

与我的另一个问题相同:我已经更改了id,它工作了,但我可以在刷新页面后看到结果。我有一个按钮来更新数据库中的内容并显示它,但通过这个按钮我仍然可以看到删除的内容。不,这是正确的键。我使用Chrome的开发工具进行了检查…奇怪的是en我刷新/重新加载页面,我可以看到记录被删除。它被删除了,但我只能看到它在刷新网站后被删除。我得到了!问题是我需要使用oncomplete事件更新UI…另外,我的更新功能有一个小问题。谢谢!我通过转换删除功能解决了这个问题参数设置为number by number()函数。
dbRequest.onsuccess = function (event: any) {
      const db: IDBDatabase = event.target.result;

      const transaction = db.transaction([albumStoreObjName], "readwrite");

      transaction.oncomplete = () => {
        subscriber.next();
        subscriber.complete();
      };

      const objectStore = transaction.objectStore(albumStoreObjName);
      const request = objectStore.delete([albumId]);

      // ...
    };