【发布时间】:2014-03-19 10:20:03
【问题描述】:
我昨天发布了类似的东西,但它有效但只删除了数据中的最后一个对象。
我想要发生的事情
这个 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 ();
}
}
}
【问题讨论】:
-
这个 IDB 代码看起来通常是正确的。问题是它有效,但只是有时?你能再描述一下它什么时候起作用,什么时候不起作用? jQuery 对象上的
async属性与异步请求有关,而不是 IndexedDB。这可能是 ajax 问题而不是 IDB 问题吗? -
它只删除了 ajax 中的一个对象,它循环了 10 个。它应该被删除,因为它们成功了。我的解决方案是将 res.key 传递给我的 php 脚本,然后将其回显以删除。
-
循环在哪里?听起来您在定义
passData的任何地方都有范围问题,但我在上面包含的内容中看不到此代码。 -
cursor.onsuccess = function(e) { var res = e.target.result; if(res) {
-
嗯,我明白了。我会更新我的答案。
标签: javascript jquery ajax indexeddb