1

快速概述我所拥有的以及与之相关的问题。我有一个 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 和 HTML5,最好的方法是什么?我知道 Web SQL 已被弃用,但我相信这可能是我存储这些数据的唯一方式。如果不是,那么在发送之前动态存储 X 个条目的最佳方法是什么?

谢谢您的帮助。

编辑:

这种情况怎么样,当研究人员要做“全横断面”的时候……

研究人员必须从一个位置到另一个位置,直到完成每个样带的 20 次完整数据收集。这需要 20 个不同的地点,每个地点都有不同数量的蝾螈和小动物要输入。

localstorage当只允许 Key:Value 对时,你将如何存储更大的数据集,以便在最后卸载?

4

3 回答 3

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并以可恢复的形式保存。

于 2012-05-04T03:29:13.397 回答
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
于 2012-05-04T03:24:43.650 回答
1

将大型数据集存储在localStorage.

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

与直觉相反,即使 WebSQL 规范不会被进一步开发,WebSQL 仍然是最广泛支持的选项,而 IndexedDB 仍然是新生的。

如果您使用 localStore 路线,就像使用移动设备一样,您应该尽可能信任内存中的表示,并且只有在无法从内存中读取时才从“磁盘”中读取。

于 2012-05-04T04:23:35.523 回答