Javascript 未能执行';把';在';IDBObjectStore';:交易已经完成
我正在尝试使用indexedDB更新我的简易程序中的一个条目,但是我在IDBObjectStore上执行“put”失败:事务已完成。 我似乎不明白它为什么不能完成事务,我尝试了调试器,它停在这一行:Javascript 未能执行';把';在';IDBObjectStore';:交易已经完成,javascript,google-chrome,indexeddb,Javascript,Google Chrome,Indexeddb,我正在尝试使用indexedDB更新我的简易程序中的一个条目,但是我在IDBObjectStore上执行“put”失败:事务已完成。 我似乎不明白它为什么不能完成事务,我尝试了调试器,它停在这一行:var updateNameRequest=tasksStore.put(requestForItem.result.name,Number(requestForItem.result.id))请查看我下面包含的代码片段。对于额外的上下文创建、读取和删除工作,这只是更新我遇到麻烦的数据 我还试着实现我
var updateNameRequest=tasksStore.put(requestForItem.result.name,Number(requestForItem.result.id))
请查看我下面包含的代码片段。对于额外的上下文创建、读取和删除工作,这只是更新我遇到麻烦的数据
我还试着实现我从Mozilla获得的openCursor技术,我对此进行了评论,因为它也不起作用(我得到了相同的行为)
当所有请求都已完成且在控件返回到事件循环之前未发出进一步请求时,索引数据库事务将自动提交。换句话说,您可以在先前请求的成功或错误回调中发出新请求,但不能在其他异步回调(如事件处理程序)中发出新请求
您需要在单击处理程序中启动一个新事务,因为以前的任何事务都将自动提交。当所有请求都已完成且在控件返回到事件循环之前没有进一步请求时,索引数据库事务将自动提交。换句话说,您可以在先前请求的成功或错误回调中发出新请求,但不能在其他异步回调(如事件处理程序)中发出新请求
您需要在单击处理程序中启动新事务,因为以前的任何事务都将自动提交。这是否回答了您的问题?这回答了你的问题吗?天哪,你救了我一个大头疼!!非常感谢,我刚刚编辑了它,现在我的代码正在运行。我的天啊,你救了我一个大头疼!!非常感谢,我刚刚编辑了它,现在我的代码正在运行。亚历克萨打了一场甜蜜的胜利
const request = window.indexedDB.open("toDoList", 2);
var db;
request.onsuccess = function (event) {
console.log("check out some data about our opened db: ", request.result);
db = event.target.result; // result of opening the indexedDB instance "toDoList"
getTasks(); //just a function to retrieve data
};
$(document).on("click", ".editBtn", function () {
var transaction = db.transaction("tasks", "readwrite");
var tasksStore = transaction.objectStore("tasks");
console.log(tasksStore);
let taskId = $(this).attr("idNo");
var requestForItem = tasksStore.get(Number(taskId));
requestForItem.onsuccess = function () {
// console.log(requestForItem.result)
var oldData = requestForItem.result;
// prepopulate the input
$(".editInput").val(requestForItem.result.name);
$(".saveBtn").click(function () {
requestForItem.result.name = $(".editInput").val().trim()
console.log( requestForItem.result)
var updateNameRequest = tasksStore.put( requestForItem.result.name, Number(requestForItem.result.id))
console.log("-------------", updateNameRequest.transaction) // doesn't get to this line
updateNameRequest.onerror = function() {
console.log("something went wrong")
console.log(updateNameRequest.error)
};
updateNameRequest.onsuccess = function() {
console.log("here")
$(".editInput").val("")
getTasks();
};
});
};