6

我的返回 json 文件如下所示:

var data = [{"col1":"value1","col2":"value1","col3":"value1"},{"col1":"value2","col2":"value2","col3":"value2"},{"col1":"value3","col2":"value3","col3":"value3"}];

没有 JSON.stringify 数据看起来像这样:

[对象对象],[对象对象],[对象对象]

但有了它,result.length 不是 5,而是字符串的字符总数,这样我就不能循环了

var result = JSON.stringify(data);
for(i=0; i<result.length; i++){
var transaction = db.transaction([STORE], IDBTransaction.READ_WRITE);
var put = transaction.objectStore(STORE).put(result);
};   
4

2 回答 2

5
var data = [{"col1":"value1","col2":"value1","col3":"value1"},{"col1":"value2","col2":"value2","col3":"value2"},{"col1":"value3","col2":"value3","col3":"value3"}];

如果您尝试存储每个 OBJECT,则不要对其进行字符串化或任何其他操作,它已经是完美的形式。更改for()循环以循环遍历数据对象。

出于性能原因, Kristof Degrave有一个很好的观点,即把这些放在实际的 for 循环之外。

    var transaction = db.transaction([STORE], IDBTransaction.READ_WRITE); 
    var objstore = transaction.objectStore(STORE); 

    for (i = 0; i < data.length; i++) { 
        objstore.put(data[i]);
    } 
于 2012-09-26T17:37:18.350 回答
4

对于新访问者,建议进行一些修改:IDBTransaction.READ_WRITE 已被弃用,因此请改用“readwrite”。

资源:https ://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API/Using_IndexedDB 参考:

较旧的实验性实现使用已弃用的常量 IDBTransaction.READ_WRITE 而不是“读写”。

此外,要减少 loc(我最喜欢),请使用:

var objstore = db.transaction([STORE], "readwrite").objectStore(STORE); 
for (i = 0; i < data.length; i++) { 
    objstore.put(data[i]);
}
于 2014-09-19T07:08:26.853 回答