无法使用 Firefox 将 () 数据放入 indexeddb 数据库
Cannot put() data to an indexeddb database using Firefox
您好,我创建了一个 Indexeddb 数据库,但无法向其中输入数据。
数据库:
var request = indexedDB.open("BCDB");
request.onupgradeneeded = function() {
var db = request.result;
var store = db.createObjectStore("psf", { autoIncrement: true });
var psTag = store.createIndex("ps_tag", "psTag");
var psNameIndex = store.createIndex("ps_name", "psName");
var psResultIndex = store.createIndex("ps_result", "psResult");
var psDateIndex = store.createIndex("ps_date", "psDate");
};
request.onsuccess = function() {
db = request.result;
};
我可以看到数据库是在 Firefox 的 "Storage" windows 上创建的,但是当我尝试向其中输入一些内容时,它根本不起作用。
var tx = db.transaction("psf", "readwrite");
var store = tx.objectStore("psf");
var request = store.put({
psName: "ABC",
psTag: "XYZ",
psDate: "DEF",
psResult: "QWE"
});
request.onsuccess = function(e) {
alert('done');
};
request.onerror = function(e) {
alert(e.value);
};
此问题仅出现在 Firefox 上。我可以在 Chrome 上成功输入。我隔离并发现是 put() 失败了,但在 Chrome.
上没问题
你的代码显示你只是想在数据库中插入一些数据,所以为什么要使用 put()
,而不是使用 add()
,这是为了这个目的。
put()
是更新数据库中的东西,而 add()
是插入。
检查 - IDBObjectStore API
var request = store.add({
psName: "ABC",
psTag: "XYZ",
psDate: "DEF",
psResult: "QWE"
});
更新:使用 POC 样本
检查下面的代码,无论您使用 put()
还是 add()
,它都会起作用。试一试,它应该有效。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Whosebug</title>
<script>
var DB_handler = null
var request = indexedDB.open("BCDB");
request.onupgradeneeded = function(event) {
var db = request.result;
var store = db.createObjectStore("psf", { autoIncrement: true });
var psTag = store.createIndex("ps_tag", "psTag");
var psNameIndex = store.createIndex("ps_name", "psName");
var psResultIndex = store.createIndex("ps_result", "psResult");
var psDateIndex = store.createIndex("ps_date", "psDate");
};
request.onsuccess = function(event) {
DB_handler = event.target.result;
var tx = DB_handler.transaction("psf", "readwrite");
var store = tx.objectStore("psf");
var request = store.add({
psName: "ABC",
psTag: "XYZ",
psDate: "DEF",
psResult: "QWE"
});
request.onsuccess = function(e) {
alert('done');
var transaction = DB_handler.transaction(["psf"]);
var objectStoreHandler = transaction.objectStore("psf");
var cursorHandler = objectStoreHandler.openCursor();
cursorHandler.onerror = function(event) {
if (errorCallBack && typeof(errorCallBack) == 'function') {
errorCallBack(event);
}
};
cursorHandler.onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
if(cursor.value != null && cursor.value != undefined){
console.log(cursor.value);
}
}
};
};
request.onerror = function(e) {
alert(e.value);
};
};
</script>
</head>
<body>
</body>
</html>
我的 Firefox 版本是 38.0.1。你能不能看看你的Firefox版本是不是太旧了,没有IndexedDB,因为add()
和put()
是基本功能所以应该正确实现。
您好,我创建了一个 Indexeddb 数据库,但无法向其中输入数据。 数据库:
var request = indexedDB.open("BCDB");
request.onupgradeneeded = function() {
var db = request.result;
var store = db.createObjectStore("psf", { autoIncrement: true });
var psTag = store.createIndex("ps_tag", "psTag");
var psNameIndex = store.createIndex("ps_name", "psName");
var psResultIndex = store.createIndex("ps_result", "psResult");
var psDateIndex = store.createIndex("ps_date", "psDate");
};
request.onsuccess = function() {
db = request.result;
};
我可以看到数据库是在 Firefox 的 "Storage" windows 上创建的,但是当我尝试向其中输入一些内容时,它根本不起作用。
var tx = db.transaction("psf", "readwrite");
var store = tx.objectStore("psf");
var request = store.put({
psName: "ABC",
psTag: "XYZ",
psDate: "DEF",
psResult: "QWE"
});
request.onsuccess = function(e) {
alert('done');
};
request.onerror = function(e) {
alert(e.value);
};
此问题仅出现在 Firefox 上。我可以在 Chrome 上成功输入。我隔离并发现是 put() 失败了,但在 Chrome.
上没问题你的代码显示你只是想在数据库中插入一些数据,所以为什么要使用 put()
,而不是使用 add()
,这是为了这个目的。
put()
是更新数据库中的东西,而 add()
是插入。
检查 - IDBObjectStore API
var request = store.add({
psName: "ABC",
psTag: "XYZ",
psDate: "DEF",
psResult: "QWE"
});
更新:使用 POC 样本
检查下面的代码,无论您使用 put()
还是 add()
,它都会起作用。试一试,它应该有效。
<!DOCTYPE html>
<html lang="en">
<head>
<title>Whosebug</title>
<script>
var DB_handler = null
var request = indexedDB.open("BCDB");
request.onupgradeneeded = function(event) {
var db = request.result;
var store = db.createObjectStore("psf", { autoIncrement: true });
var psTag = store.createIndex("ps_tag", "psTag");
var psNameIndex = store.createIndex("ps_name", "psName");
var psResultIndex = store.createIndex("ps_result", "psResult");
var psDateIndex = store.createIndex("ps_date", "psDate");
};
request.onsuccess = function(event) {
DB_handler = event.target.result;
var tx = DB_handler.transaction("psf", "readwrite");
var store = tx.objectStore("psf");
var request = store.add({
psName: "ABC",
psTag: "XYZ",
psDate: "DEF",
psResult: "QWE"
});
request.onsuccess = function(e) {
alert('done');
var transaction = DB_handler.transaction(["psf"]);
var objectStoreHandler = transaction.objectStore("psf");
var cursorHandler = objectStoreHandler.openCursor();
cursorHandler.onerror = function(event) {
if (errorCallBack && typeof(errorCallBack) == 'function') {
errorCallBack(event);
}
};
cursorHandler.onsuccess = function(event) {
var cursor = event.target.result;
if (cursor) {
if(cursor.value != null && cursor.value != undefined){
console.log(cursor.value);
}
}
};
};
request.onerror = function(e) {
alert(e.value);
};
};
</script>
</head>
<body>
</body>
</html>
我的 Firefox 版本是 38.0.1。你能不能看看你的Firefox版本是不是太旧了,没有IndexedDB,因为add()
和put()
是基本功能所以应该正确实现。