Сохраняйте данные локального хранилища на сервер, используя PHP - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь реализовать функцию «сохранить позже» в jquery с использованием localstorage. Идея заключается в сохранении каждого события формы в localalstorage и использовании кнопки для их синхронизации и сохранения на сервере.

Мне удается сохранить данные формы в локальном хранилище и получить все сохраненные локальные хранилища. В настоящее время я борюсь за то, как я могу иметь возможность отправлять конкретные значения только на сервер, используя PHP

Вот мой код для сохранения данных формы в localalstorage

$('#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

что я действительно хочу сделать, так это когда я отправляю данные localalstorage в php, они автоматически образуют определенный массив, например

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

);

1 Ответ

0 голосов
/ 28 мая 2019

Проблема в том, что ваша allStorage() функция возвращает индексированный массив, а не объект, поэтому вы получаете только значения из локального хранилища, а не ключи тоже.

Это означает, что когда вы приходите кПередача данных в PHP, они заканчиваются в виде индексированного, а не ассоциативного массива, то есть без ключей.Это будет очевидно, если вы, например, запустите print_r() на полученных данных.

allStorage() можно исправить (и упростить) как:

function allStorage() {
    let data = {}; //<-- note object, not array
    for (var key in localStorage) data[key] = localStrage[key];
    return data;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...