移动HTML5应用程序本地存储

时间:2012-05-04 03:12:35

标签: javascript html5 local-storage web-sql indexeddb

快速概述我拥有的内容以及与之相关的问题。我有一个HTML5应用程序,我将使用PhoneGap作为本机应用程序运行。它是当地野外研究站的小型数据收集应用程序。

该现场站的问题是它们容易丢失信号以传输数据;因此,我想将数据存储在设备上供以后使用(或将其发送到服务器)。

需要保存的数据如下:

*User Name (string)
*Transect Color (string)
*Transect Number (int)
*Transect Board (char)
*Salamander Name (string)
*Snount-Vent Length (int)
*Total Length (int)
*Centipedes (int)
*Red-Black Millipedes (int)
*Brown Round Millipedes (int)
*Brown Flat Millipedes (int)

应用程序本身将是一个独立的应用程序,因此我希望它能够保存数据。

使用jQuery和amp;组合的最佳方法是什么? HTML5?我知道Web SQL已被弃用,但我相信这可能是我存储这些数据的唯一方法。如果没有,那么在发送之前动态存储X个条目的最佳方法是什么?

感谢您的帮助。

编辑:

当研究人员必须做一个“全面变换”时,这种情况怎么样......

研究人员必须从一个地点到另一个地点,直到完成每个横断面的20个完整数据收集。这需要20个不同的位置,每个位置都有不同数量的蝾螈和生物进入。

localstorage仅允许Key:Value对时,你如何存储更大的数据集,最后卸载?

3 个答案:

答案 0 :(得分:2)

我非常喜欢将localStorage包裹在迷你键值存储中:

window.storage = {
  store:localStorage,
  get: function( key ) {
    try {
      return JSON.parse(this.store[key]);
    } catch(e) {};
    return undefined;
  },
  set: function( key, value) {
    try {
      this.store[key] = JSON.stringify(value);
    } catch(e) {};
  }
}

这使您可以直接引用window.storage。假设您将描述的字段包含在名为row的哈希中,您现在可以直接序列化:

storage.set('myrow', row);

由于您在row中存储的数据将被序列化,您可以创建一个document,其中包含的信息比单个SQL行可能包含的信息要多得多:

var document = {
  property: 'foo',
  nestedArray: [ 'foo', 'bar', 'baz' ],
  nestedObj: { 'key': 'foo', 'key2': 'foo' }
}

storage.set('transectID', document);

...你明白了。关键是你甚至可以将非常丰富的数据减少JSON.stringify并以可恢复的形式保存。

答案 1 :(得分:1)

例如:

var data = {
  name: 'x',
  transect_color: 'red'.
  .....
  ..
};

localStorage.setItem('mydata', JSON.stringify(data));  // mydata is the name of storage

要获取数据,您可以尝试如下:

var temp = localStorage.getItem('mydata');

if(temp != null) {
  var dataJSON = JSON.parse(temp);
}

如果您想清除localStorage数据,请用户关注:

localStorage.clearItem('mydata');

您可以存储多个数据,如下所示:

var x = [];  // take an array to store all data

x.push({a: 'x', b: 'y'});

localStorage.setItem('mydata', JSON.stringify(x));

// for further entry

var temp = JSON.parse(localStorage.getItem('mydata')); // retrieve localStroage item

temp.push({a: 'xx', b: 'yy'})  // push new data to array

localStorage.setItem('mydata', JSON.stringify(t)); // overwrite the existing entry with new data

console.log(JSON.parse(localStorage.getItem('data'))); // you will see your all data here

答案 2 :(得分:1)

localStorage中存储大型数据集并不是一个好主意。

WebSQL已弃用IndexedDB是大型浏览器内数据集的首选工具,但尚未在PhoneGap中提供(尽管它应该在路线图上)。

反直觉地说,即使WebSQL规范不会在那里进一步发展WebSQL is still the most widely supported选项,而IndexedDB仍然处于初期阶段。

如果你去localStore路由,就像移动一样,你应该尽可能地信任内存中的表示,只有当你无法从内存中读取时才能从“磁盘”读取。