无法使用Firefox

时间:2015-06-02 04:55:13

标签: 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.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上没问题。

1 个答案:

答案 0 :(得分:2)

您的代码显示您只是想在数据库中插入一些数据,那么为什么要使用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>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>   

enter image description here

我的Firefox版本是38.0.1。如果你的Firefox版本太旧而无法使用IndexedDB,你可以查看它吗,因为add()put()是基本功能所以它们应该正确实现。