我正在尝试向IndexedDB添加javascript对象(函数构造函数),但出现错误
无法在“IDBObjectStore”上执行“添加”:如果您有一个字符串,那么您可以使用以下方法来替换它:|“); //CHUSJ|第5区块|B......}无法克隆。
下面的代码有什么错误吗:
$.ajax({
url: '/Review/GetDynamicPositions',
type: 'POST',
data: {
ProfileId: profileId,
DateDebut: dateDebut,
DateFin: dateFin
},
success: function (reponse) {
if (reponse.indexOf("Erreur") < 0)
{
review = new Review(profileId);
const dynamicPositions = JSON.parse(reponse);
dynamicPositions.forEach(dynamic => {
const dynamicPosition = new DynamicPosition();
dynamicPosition.positionX = dynamic.PositionX;
dynamicPosition.positionY = dynamic.PositionY;
dynamicPosition.floorId = dynamic.FloorId;
dynamicPosition.zoneId = dynamic.ZoneId;
dynamicPosition.mapHierachyString = dynamic.MapHierchString;
dynamicPosition.changeMapString();
review.addDynamicPosition(dynamicPosition);
});
//..Sauvegarder le review dans la BD
sauvegarderReview(review);
}
}
});
function sauvegarderReview(review)
{
const transcation = db.transaction('ReviewStore', 'readwrite');
const store = transcation.objectStore('ReviewStore');
//..Ajouter dans la BD
const request = store.add(review);
request.onsuccess = function (e)
{
console.log('Sauvegarder avec success');
};
request.onerror = function (e) {
console.log("Error", e.target.error.name);
};
}
//Review object
function Review(profileId)
{
this.profileId = profileId;
this.dynamicPositions = [];
this.addDynamicPosition = function (dynamicPosition)
{
this.dynamicPositions.push(dynamicPosition);
}
}
//DynamicPosition object
function DynamicPosition()
{
this.positionX = 0;
this.positionY = 0;
this.mapHierachyString = ''; //CHUSJ>Bloc 5>B
this.floorId = 0;
this.zoneId = '';
this.changeMapString = function () {
this.mapHierachyString = this.mapHierachyString.replace(/>/g, "|");
this.mapHierachyString = this.mapHierachyString.replace(/ /g, "_");
}
}
2条答案
按热度按时间nr9pn0ug1#
规格说明:
每条记录都与一个值相关联。用户代理必须支持任何可序列化的对象。这包括简单类型,如String基元值和Date对象以及Object和Array示例、File对象、Blob对象、ImageData对象等。
基本上这意味着你存储到IndexedDB的对象只能包含所有可能变量的有限子集。函数是不能存储在IndexedDB中的东西之一。根据你发布的错误消息,你的
review
对象中一定有一个函数。如果要将
review
中的数据存储在IndexedDB中,则必须对其进行某种转换,使其不包含函数或任何其他有问题的数据类型。gzszwxb42#
您必须首先序列化数据中的JS函数(仅限),然后将它们作为序列化数据添加到IndexedDB中:
然后反序列化:
在您的IndexedDB代码中,它将类似于:
然后,获取密钥的
keyData
: