我正在尝试使用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);
}
我真正想发生的是,当我将本地存储数据提交给php时,它将自动形成特定的数组,例如
$data = array(
'type'=>'product',
'beginning'=>1,
'delivery'=>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;
}