当前位置: 首页 > 面试题库 >

Ajax IndexedDB删除当前成功全部上传

郦楷
2023-03-14
问题内容

我昨天发布了类似的内容,但是它起作用了,但是只删除了数据中的最后一个对象。

我想发生什么

此ajax上传将处理大量数据,因此我正在使用indexeddb。这也将在手机上使用。因此,我希望它一次上传一个项目,如果一个项目未能从数据中删除之前的项目,那么它们就不需要再次上传所有内容。

我已经尝试过async = false,这完全符合我的需要,但是这个冰柜浏览器。

当前代码 试图注释掉可能造成混淆的任何位,当前,这仅在完成后才删除最后一项。

function uploadData(e) {

 //Get Database 
 var transaction = db.transaction(["data"], "readonly");
 var objectStore = transaction.objectStore("data");
 var cursor = objectStore.openCursor();

 //Starts Looping
 cursor.onsuccess = function(e) {
     var res = e.target.result;
     if (res) {
         if (navigator.onLine) {
             $('.popup-heading').text('Uploading...');
             var passData = {
                 client_id: res.value.client_id,
                 parent_id: res.value.parent_id,
                 storename: res.value.storename,
                 image: res.value.image,
                 key: res.key,
             };
             var jsonData = JSON.stringify(passData);
             $.ajax({
                 url: "{{ path('destination_app_ajax') }}",
                 type: "post",
                 // Works but freezes browser 
                 /*async, flase*/
                 data: {
                     "json": passData
                 },
                 success: function(JsonData) {

                     //Delete item once successfull 
                     var t = db.transaction(["data"], "readwrite");
                     var request = t.objectStore("data").delete(passData.key);
                     t.oncomplete = function(event) {
                         console.log('item deleted');
                     };
                 },
                 error: function() {
                     $('.popup-heading').text('Upload Failed!');
                 }
             });
         } else {
             $('.popup-heading').text('Please find stronger signal or wifi connection');
         }
         res.
         continue ();
     }
 }

}


问题答案:

听起来您有范围问题passData。在循环内部,但在定义之前,请var passData = ...尝试使用匿名函数包装代码块:

(function() {
   /* Your code here */
}());

那应该防止passData泄漏到全局范围内,这似乎就是为什么您的IDB代码仅在最后一个循环中起作用的原因。(passData每次AJAX响应完成之前都会重新定义。)

更新
:没有循环,您正在处理回调。我看到的情况是,您正在重新定义onsuccess每个Ajax请求的处理程序(并覆盖除最后一个值之外的所有值),并重用同一事务。尝试将此事务代码移到AJAX请求的成功回调中:

//Get Database 
 var transaction = db.transaction(["data"], "readonly");
 var objectStore = transaction.objectStore("data");
 var cursor = objectStore.openCursor();

这将创建一个关闭并delete在每个响应上提交您的事务。这意味着每个AJAX请求一个事务,每个AJAX请求一个onsuccess回调(不重新定义)。



 类似资料:
  • 本文向大家介绍nhibernate 全部删除孤立项,包括了nhibernate 全部删除孤立项的使用技巧和注意事项,需要的朋友参考一下 示例 保存/更新/删除对象时,请检查关联并保存/更新/删除找到的所有对象。除此之外,当一个对象从关联中删除并且不与另一个对象(孤立的)关联时,也将其删除。

  • 问题内容: 首先,我要说我正在SQL Server 2005上运行,所以我没有访问权限。 我有一个约有15万行的表,每天都要从一个文本文件中进行更新。当行从文本文件中掉出时,我需要从数据库中删除它们,如果它们发生更改或是新的,则需要相应地进行更新/插入。 经过一些测试,我发现从性能角度来看,完全删除然后从文本文件中批量插入要比逐行读取文件进行更新/插入要快得多,这是指数级的。但是,我最近遇到了一些

  • 我想在当前的中启动一个通知,即。当我按下通知时,我想输入。 但是,我不希望当前的在中完成。因为我正在接收数据,当我按下后退按钮时,我想留在。 关键是我不想让结束,不管我目前在哪个中。 那我该怎么办? 这是密码 问题是: 现在我输入,当我按下后退按钮时,我返回桌面。意味着已经完成了我不想要的。 这里是主要的

  • 问题内容: 案例我在/ notes / get / 1 /中,其中id =1,并且我在note.html中创建了“删除注释”链接。我需要它从数据库和应用程序中删除 当前 注释,然后重定向到/ notes / all。您能帮我处理def delete中的代码吗? models.py: urls.py: views.py: 问题答案: from django.shortcuts import get_

  • 本文向大家介绍易语言删除文本中的全部空格功能,包括了易语言删除文本中的全部空格功能的使用技巧和注意事项,需要的朋友参考一下 删全部空命令 英文命令:TrimAll 操作系统支持:Windows、Linux    所属类别:文本操作 返回一个文本,其中包含被删除了所有全角或半角空格的指定文本。 语法:  文本型  删全部空 (欲删除空格的文本) 例程 说明 通过“删全部空”命令将一段文本中的空格全部

  • 要实现同图片所示内容,前4列内容都是固定的。 渲染代码如下 <template> <div> <el-table :data="waterData" border :span-method="handleSpanM"> <script> export default { data() { }, methods: { }, mounted() { }, 渲染后结果 怎么实现效果呢前4列除了第一列和第