使用PHP将本地存储数据保存到服务器

时间:2019-05-28 10:15:19

标签: javascript php local-storage

我正在尝试使用localstorage在jquery中实现“稍后保存”功能。这个想法是将每个表单事件保存在本地存储中,并使用按钮将其同步并保存到服务器。

我设法将表单数据保存到localstorage,并检索所有保存的localstorage。目前,我在努力如何只能使用PHP向服务器提交特定值

这是我的代码,用于将表单数据保存到本地存储

$('#systemInventory').on("submit", function(e) {
        e.preventDefault(); // prevent the form from attempting to send to the web server
        let $inputs = $('#systemInventory :input');

        let values = {};
        $inputs.each(function() {
            values[$(this).attr("name")] = $(this).val();
        });

        let title = 'systemInventory' + $.now();
        localStorage.setItem(title, JSON.stringify(values));
        $('#systemInventory')[0].reset();
        mdtoast('Successfully Saved',
            { type: mdtoast.INFO });
    });

这是我用来从本地存储中检索数据的那个

function allStorage() {

    let values = [],
        keys = Object.keys(localStorage),
        i = keys.length;

    while ( i-- ) {
        values.push( localStorage.getItem(keys[i]) );
    }

    return values;
}

这是我正在尝试将特定数据保存在PHP存储中的那个

$.each(allStorage(), function (key, value) {
        let data = JSON.parse(value);
        console.log(data);
        $.ajax({
            url: "sync.php",
            method: 'POST',
            data: {data: data},
            success: function (response) {
                console.log(response);
            },
            error: function (response) {
                console.log(response);
            }
        });
    });

我的php代码是

if (isset($_POST['data'])){

    foreach ($_POST['data'] as $key => $value){

        $data[] = array(
            $key => $value
        );

    }

    $dataForm = call_user_func_array('array_merge', $data);

    print_r($dataForm);


//    print_r($data);

}

当控制台记录所有保存的本地存储时,我得到此结果 enter image description here

,当单击同步时,正在服务器上发送的同步出现此问题 enter image description here

我真正想发生的是,当我将本地存储数据提交给php时,它将自动形成特定的数组,例如

$data = array(
'type'=>'product',
'beginning'=>1,
'delivery'=>1

);

1 个答案:

答案 0 :(得分:0)

问题在于您的allStorage()函数正在返回索引数组,而不是对象,因此您只能从本地存储中获取值,而不能从键中获取。

这意味着当您将数据传递给PHP时,它最终将成为索引的而不是关联的数组,即没有键。例如,如果您对收到的数据运行print_r(),这将很明显。

allStorage()可以固定为(并简化为):

function allStorage() {
    let data = {}; //<-- note object, not array
    for (var key in localStorage) data[key] = localStrage[key];
    return data;
}