快速概述我拥有的内容以及与之相关的问题。我有一个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对时,你如何存储更大的数据集,最后卸载?
答案 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路由,就像移动一样,你应该尽可能地信任内存中的表示,只有当你无法从内存中读取时才能从“磁盘”读取。