IndexedDB - DataError:提供给操作的数据不符合要求

2023-11-24

我看过其他类似的问题。我的情况有所不同,因为我插入的是简单的 json 对象,没有键,没有自动增量。

这是执行插入的部分:

function insertInto(model, data, successCallback) {
    console.log("inserting into model "+model); 
    var transaction = db.transaction([model], IDBTransaction.READ_WRITE || 'readwrite');
    var store, i, request;
    var total = data.length;

    function successCallbackInner() {
        total = total - 1;
        if (total === 0) {
            successCallback();
        }
    }
    transaction.onerror = indexedDBError;
    store = transaction.objectStore(model);
    for (i in data) {
        if (data.hasOwnProperty(i)) {
            console.log(data[i]);
            request = store.add(data[i]);
            request.onsuccess = successCallbackInner;
            request.onerror = indexedDBError;
        }
    }
}

错误是DataError: Data provided to an operation does not meet requirements.

当我记录数据时,我尝试插入它,确认我的对象是一个具有三个字符串参数的简单对象:Object { cooked="well done", cheese="provolone", toasted="no"}

这里有一个jsFiddle带有完整的测试代码。

任何和所有建议都将受到赞赏。甚至回复“试试这个”。从昨天早上起我就一直在想办法解决这个问题。

谢谢


如果您在 Chrome 中尝试,您会看到更多信息错误:

DataError:无法在“IDBObjectStore”上执行“add”:对象存储使用外线密钥,没有密钥生成器,并且未提供密钥参数。

在 jsfiddle 中,您的对象存储是用以下命令创建的db.createObjectStore(modelData[i].name, {autoIncrement: false});这意味着 (1) 没有关键路径 (keyPath选项不存在),并且(2)没有密钥生成器(autoIncrement选项为假)。这意味着 (1) 不会从值中提取密钥,并且 (2) 商店不会为您生成密钥。所以调用时需要指定按键add()否则你会得到这个例外。

举几个例子:

// out-of-line keys, no key generator
var s1 = db.createObjectStore('s1');
s1.add(value, "my_key"); // key will be "my_key"

// out-of-line keys, key generator
var s2 = db.createObjectStore('s2', {autoIncrement: true});
s2.add(value); // key will be 1
s2.add(value, 123); // key will be 123
s2.add(value); // key will be 124

// in-line keys, no key generator
var s3 = db.createObjectStore('s3', {keyPath: 'id'});
s3.add({id: 123}); // key will be 123

// in-line keys, key generator
var s4 = db.createObjectStore('s4', {keyPath: 'id', autoIncrement: true});
s4.add({}); // key will be 1 (and inserted into record)
s4.add({id: 123}); // key will be 123
s4.add({}); // key will be 124 (and inserted into record)

未显示的情况会引发DataError例外。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IndexedDB - DataError:提供给操作的数据不符合要求 的相关文章