无法使用db.js将大数组保存到IndexedDB中

时间:2013-03-01 19:47:33

标签: javascript arrays windows-8 indexeddb db.js

我尝试使用db.js将大数组保存到IndexedDB数据库中。该数组包含不同于用户的100-1000个元素,因为我在JS中的Windows 8 Store-App工作,该数组包含用户图片库中找到的所有照片的对象。我想将该数组保存到数据库中,因为我不想再次构建它。我在尝试保存时遇到了DataCloneError。

这是我的代码:

server.objects.add({
   id: 0,
   pic: nametowrite,
   value: contenttowrite
});

picturesLibrary.getItemsAsync().then(function (items) { 
    if (items.size == 0) { return }; 
    for (var i2 = 0; i2 < items.size; i2++) { 
        if (items[i2].isOfType(Windows.Storage.StorageItemTypes.file)) { 
            if (filetype(items[i2].name) == true) { 
                pictures.push(items[i2]); 
            } 
        } else { 
            folders.push(items[i2]) 
        } 
    } 
});

1 个答案:

答案 0 :(得分:0)

如果您尝试保存DOM节点而不是数组太大,则会引发该错误。来自MDN的The Structured Clone Algorithm

  
      
  • 尝试克隆DOM节点同样会抛出DATA_CLONE_ERR异常。
  •   

contenttowrite(假设这是您的图片)需要是blob

以下是blob代码段的图片:

var ajax = new XMLHttpRequest(),
    blob;
ajax.open( 'GET', 'example.png', true );
ajax.responseType = 'blob'; //the magic
ajax.addEventListener( 'load', function () {
    if ( ajax.status == 200 ) {
        blob = ajax.response;
    };
} );
ajax.send();