IndexedDB put/add 在 Chrome 中静默失败(适用于所有网站)
IndexedDB put/add failing silently in Chrome (for all websites)
在 Chrome 上使用 IndexedDB 进行了一些成功的开发后,所有写操作都停止了,没有给出任何错误。
Safari 一切正常。
这是一个简单的示例,但无法正常工作:
var db = null;
var req = indexedDB.open("TestDb", 1);
req.onsuccess = function(event) {
db = event.target.result;
db.onerror = function(event) {
error('Error: ', event.target.errorCode);
};
var os = db.transaction(['users'], "readwrite").objectStore('users');
req = os.put({id: 2, name: 'Benoît'});
req.onsuccess = function (event) {
console.log('Put success', event.target.result);
var os = db.transaction(['users'], "readwrite").objectStore('users');
var req = os.get(2);
req.onsuccess = function(event) {
console.log('Get success', event.target.result);
}
};
req.onerror = function (event) {
console.log('error', event);
};
};
req.onupgradeneeded = function(ev) {
console.log('db upgradeneeded', ev);
var db = ev.target.result, objectStore;
if (ev.oldVersion < 1) {
objectStore = db.createObjectStore('users', {keyPath: "id"});
objectStore.createIndex("name", "name", {unique: false});
}
};
导致控制台日志:
Put success 2
Get success undefined
实际上 space 磁盘空间不足。
正如@Joshua Bell 所说,查询成功但事务中止,因此您需要观察transaction.onabort
以引发错误消息。
在 Chrome 上使用 IndexedDB 进行了一些成功的开发后,所有写操作都停止了,没有给出任何错误。 Safari 一切正常。
这是一个简单的示例,但无法正常工作:
var db = null;
var req = indexedDB.open("TestDb", 1);
req.onsuccess = function(event) {
db = event.target.result;
db.onerror = function(event) {
error('Error: ', event.target.errorCode);
};
var os = db.transaction(['users'], "readwrite").objectStore('users');
req = os.put({id: 2, name: 'Benoît'});
req.onsuccess = function (event) {
console.log('Put success', event.target.result);
var os = db.transaction(['users'], "readwrite").objectStore('users');
var req = os.get(2);
req.onsuccess = function(event) {
console.log('Get success', event.target.result);
}
};
req.onerror = function (event) {
console.log('error', event);
};
};
req.onupgradeneeded = function(ev) {
console.log('db upgradeneeded', ev);
var db = ev.target.result, objectStore;
if (ev.oldVersion < 1) {
objectStore = db.createObjectStore('users', {keyPath: "id"});
objectStore.createIndex("name", "name", {unique: false});
}
};
导致控制台日志:
Put success 2
Get success undefined
实际上 space 磁盘空间不足。
正如@Joshua Bell 所说,查询成功但事务中止,因此您需要观察transaction.onabort
以引发错误消息。