我使用localStorage存储一些json数组(不超过25个),当用户注销时,我需要保存存储在MySQL数据库中的信息。因此,我将数据发送到负责通信和处理所有数据库内容的PHP脚本。
无论如何,我一直在网上搜索,我在这里找到了 - Merge two json/javascript arrays in to one array - 我可以使用 concat 。
我基本上使用这个功能:
function saveEverything() {
var localStorageData = "";
for (var i=0; i < localStorage.length; i++) {
localStorageData = localStorageData.concat(localStorage.getItem(localStorage.key(i)));
}
...
}
...表示将localStorageData发送到PHP脚本的ajax位。
正如您应该知道的,localStorage不会存储除字符串之外的任何内容,因此在设置项目时我必须执行JSON.stringify。您可能已经注意到,在将localStorage项连接到localStorageData变量时,我没有执行JSON.parse。我之前尝试过,当我做警报(localStorageData)时,我只有 [对象] [对象] ...(或类似的东西)。
无论如何,通过这种方法,我将字符串发送到php,每个json数组由换行符分隔。这是最好/最正确的事情,还是我应该坚持使用JSON.parse方式?
答案 0 :(得分:1)
您的 JSON 是什么样的? concat
是 Array 实例的方法,因此您只能在使用 Array 时执行此操作。此外, JSON 是一个符号,要像这样使用它,你必须将它解析回 JavaScript 然后再出来。
例如,
var json1 = '[{"foo":"bar"}]',
json2 = '[{"fizz":"buzz"}]';
var mergedJS = JSON.parse(json1).concat(JSON.parse(json2)),
mergedJSON = JSON.stringify(merged);
mergedJSON; // '[{"foo":"bar"},{"fizz":"buzz"}]'
如果它们不是 Arrays ,你可能只能将它们包裹起来(取决于你想要的结果),即
。var json1 = '{"foo":"bar"}',
json2 = '{"fizz":"buzz"}';
var mergedJSON = '[' + json1 + ',' + json2 + ']';
mergedJSON; // '[{"foo":"bar"},{"fizz":"buzz"}]'
最后,
您可能已经注意到,在将
JSON.parse
项连接到localStorage
变量时,我没有localStorageData
。我之前尝试过,当我做alert(localStorageData)
时,我只有[object Object]
[object Object]
是在{strong>任何 对象上调用toString
的结果。
({}).toString(); // "[object Object]"
如果您想看到有用的内容,请使用console.log
并查看控制台,或使用JSON.stringify
转换回 String 。
答案 1 :(得分:1)
alert(localStorageData)我只有[Object] [object]
这是正常的,您应该坚持使用此先前版本,构建对象的对象并最终使用
JSON.stringify(localStorageData)
将其作为字符串发送。
function saveEverything(){
var localStorageData = {},
l = localStorage.length,
k;
for (var i=0; i < l; i++) {
k = localStorage.key(i);
localStorageData[k] = JSON.parse(localStorage.getItem(k));
}
return localStorageData;
}
使用对象也可以更容易区分这些数组,因为您还可以保存保存它们的键。