我正在处理的网站上有一个页面,该页面称为“create.php”。它允许用户通过鼠标单击在 HTML5 画布上创建称为“实体”的 JavaScript 对象。我希望将创建的实体保存到 mysql 数据库中,然后在站点的另一个页面上重新创建,该页面称为“restore.php”。网站保存和恢复 javascript 实体很重要,而不仅仅是画布状态,因此画布 save() 和 restore() 不是选项。我到目前为止的系统在下面的链接中表示:
http://codepen.io/Tejay/pen/yDxFu
如您所见,我可以很好地保存和恢复“创建”页面上的实体。但是,该站点要求将实体保存在 mysql 数据库中并在还原页面上重新创建。我在restore.php 上重新创建实体时遇到问题。
我将每个实体转换为一个序列化对象,将其推送到一个数组,然后将该数组作为文本类型插入 mysql(我也尝试过 blob,但没有成功)在 create.php 上:
saveToStore = function(serializedEntities) {
var save = confirm("Are you sure you want to save this canvas to the database?");
if(save == true) {
store = serializedEntities;
window.location.href="save_canvas.php?store=" +store;
}
};
然后将序列化的对象数组插入到 mysql 的 save_canvas.php 上:
$canvas = $_GET['store'];
function save_canvas($canvas) {
if(isset($_GET['store'])) {
$canvas = $_GET['store'];
mysqli_query($con, "INSERT INTO canvas (canvas_id, canvas_array) VALUES ('','$canvas')");
}
}
save_canvas($canvas);
然后在 restore.php 上检索该数组,retore.php 上的 javascript 代码几乎与 create.php 的相同,只是将 php $store 变量传递给 javascript,如下所示:
<?php $store = $data['canvas_array']; ?>
<script>
var store = '<?php echo $store; ?>';
createFromStore = function() {
if(store.length > 0) {
for(var i=0;i<store.length;i++)
addEntity(store[i]);
}
}
else {
alert('nothing in store');
}
};
createFromStore(store);
</script>
将序列化数组存储到 mysql 会返回 [object Object]。出于调试目的,我使用 JSON.stringify 存储对象数组,在 restore.php 上检索它并打印出它的内容。不幸的是,由于循环引用,JSON 不是一个选项。我觉得我没有正确地将存储的数组传递给 createFromStore,但我不知道我做错了什么。任何建议表示赞赏。