我正在处理的网站上有一个页面,该页面名为“create.php”。它允许用户通过鼠标单击在HTML5画布上创建名为“实体”的javascript对象。我希望将创建的实体保存到mysql数据库,然后在网站的另一个页面上重新创建,该页面称为“restore.php”。保存和恢复javascript实体非常重要,而不仅仅是画布状态,因此canvas save()和restore()不是选项。到目前为止,我所使用的系统在以下链接中有所体现:
http://codepen.io/Tejay/pen/yDxFu
如您所见,我可以在“创建”页面上保存和恢复实体。但是,该站点要求将实体保存在mysql数据库中并在还原页面上重新创建。我在restore.php上重新创建实体时遇到问题 我将每个实体转换为一个序列化对象,将其推送到一个数组,然后在create.php上将此数组作为文本类型插入mysql(我也尝试过blob但没有成功):
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;
}
};
然后将序列化对象数组插入到save_canvas.php上的mysql中:
$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,但我不知道我做错了什么。任何建议都表示赞赏。