【问题标题】:Concatenate json arrays from localStorage and send to PHP从 localStorage 连接 json 数组并发送到 PHP
【发布时间】:2014-01-19 05:57:17
【问题描述】:

我使用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。我之前尝试过,当我执行 alert(localStorageData) 时,我只得到了 [Object][object] ...(或类似的东西)。

无论如何,通过这种方法,我将字符串发送到 php,并且每个 json 数组由换行符分隔。这是最好/正确的做法还是我应该坚持 JSON.parse 方式?

【问题讨论】:

    标签: javascript php mysql json jquery


    【解决方案1】:

    您的 JSON 是什么样的? concatArray 实例的方法,因此您只能在使用 Array 时执行此操作。此外,JSON 是一个 notation,要像这样使用它,您必须将其解析回 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"}]'
    

    如果它们不是 数组,您也许可以只包装它们(取决于您想要的结果),即

    var json1 = '{"foo":"bar"}',
        json2 = '{"fizz":"buzz"}';
    var mergedJSON = '[' + json1 + ',' + json2 + ']';
    mergedJSON; // '[{"foo":"bar"},{"fizz":"buzz"}]'
    

    最后,

    您可能已经注意到,在将 localStorage 项目连接到 localStorageData 变量时,我没有使用 JSON.parse。我之前试过,当我做alert(localStorageData)时,我只得到[object Object]

    [object Object] 是在几乎任何 对象上调用toString 的结果。

    ({}).toString(); // "[object Object]"
    

    如果您想查看有用的内容,请使用console.log 并查看控制台,或使用JSON.stringify 转换回字符串

    【讨论】:

    • 对于每个 localStorage 项目我都有这样的东西 {"test":"testing","test2":"testing2","test3":"testing3"} - 即使不使用 concat 也能正常工作JSON.parse
    • @LarissaLeite 使用 concatString 是一种不同的方法;这与在 String 上使用 + 运算符相同,即 'foo'.concat('bar') === 'foo' + 'bar'; // === "foobar"
    • 是的,我最终注意到了这一点,但感谢您的提醒!很好的解释
    【解决方案2】:

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

    使用 object 还可以更轻松地区分这些数组,因为您还可以保存保存它们的键。

    【讨论】:

    • 然后在我的 PHP 脚本上我会做 json_encode()?我需要获取每个 json 数组并将它们存储在我的数据库中
    • 这取决于你如何排序它们,如果在一些单独的字段/表中,那么你应该json_decode它,但如果你存储为json字符串,那么它已经是一个字符串。
    猜你喜欢
    • 2019-05-14
    • 2014-10-01
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2015-09-26
    • 1970-01-01
    相关资源
    最近更新 更多