Javascript 无法使用Firefox将()数据放入indexeddb数据库

Javascript 无法使用Firefox将()数据放入indexeddb数据库,javascript,firefox,indexeddb,Javascript,Firefox,Indexeddb,嗨,我创建了一个Indexeddb数据库,但在向其中输入数据时遇到了问题。 数据库: var request = indexedDB.open("BCDB"); request.onupgradeneeded = function() { var db = request.result; var store = db.createObjectStore("psf", { autoIncrement: true }); var psTag = store.createIn

嗨,我创建了一个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的“存储”窗口上创建的,但当我试图向其中输入一些内容时,它就是不起作用

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()
是插入。
检查-

更新:使用POC样本
检查下面的代码,无论您是使用
put()
还是
add()
,它都会起作用。试一试,它就会起作用

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Stackoverflow</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>   

栈溢出
var DB_handler=null
var请求=indexedDB.open(“BCDB”);
request.onupgradeneeded=函数(事件){
var db=request.result;
var store=db.createObjectStore(“psf”,{autoIncrement:true});
var psTag=store.createIndex(“ps_标记”、“psTag”);
var psNameIndex=store.createIndex(“ps_name”、“psName”);
var psResultIndex=store.createIndex(“ps_result”、“psResult”);
var psDateIndex=store.createIndex(“ps_日期”、“psDate”);
};
request.onsuccess=函数(事件){
DB_handler=event.target.result;
var tx=DB_handler.transaction(“psf”、“读写”);
var store=tx.objectStore(“psf”);
var request=store.add({
psName:“ABC”,
psTag:“XYZ”,
psDate:“DEF”,
psResult:“QWE”
});
request.onsuccess=函数(e){
警报(“完成”);
var transaction=DB_handler.transaction([“psf”]);
var objectStoreHandler=transaction.objectStore(“psf”);
var cursorHandler=objectStoreHandler.openCursor();
cursorHandler.onerror=函数(事件){
if(errorCallBack&&typeof(errorCallBack)=‘函数’){
错误回调(事件);
}
};
cursorHandler.onsuccess=函数(事件){
var cursor=event.target.result;
如果(光标){
if(cursor.value!=null&&cursor.value!=未定义){
console.log(cursor.value);
}
}
};
};
request.onerror=函数(e){
警觉(e.value);
};
};


我的Firefox版本是38.0.1。你能检查一下你的Firefox版本是否太旧了,不能使用IndexedDB,因为
add()
put()
是基本函数,所以应该正确实现它们。

因为自从我学习IDB(昨天)以来,每个人似乎都使用put(),而不是add()。关于函数,它也不起作用。我使用了与谷歌Chrome完全相同的东西,但没有任何效果。好吧,没问题,我们都在这里学习。现在请记住,插入时应使用
add()
,更新时应使用
put()
。检查我的编辑,我已经给了你一个样本POC。谢谢你的帮助。我也用了最新的版本。但它也不起作用。你的代码在Google Chrome上运行得很好Firefox呢,你在FF中试过这个代码吗?你的FF版本是什么?是的,请查看图片。这是Firefox上的结果。当然是最新版本38.0.1。这是谷歌浏览器的结果。每次都很完美。我只是不明白为什么它在Firefox上会失败。
<!DOCTYPE html>
<html lang="en">
<head>
    <title>Stackoverflow</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>