从localStorage连接json数组并发送给PHP

时间:2014-01-01 18:35:45

标签: javascript php mysql json jquery

我使用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方式?

2 个答案:

答案 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;
}

使用对象也可以更容易区分这些数组,因为您还可以保存保存它们的键。