这是我的第一篇文章,所以如果我遗漏了什么,请耐心等待:)。
我正在使用GoJS中的go-debug.js库在浏览器上制作一些图表,但我遇到了保存选项的问题。此图生成一个JavaScript对象,您可以将其转换为Json,并通过此命令 myDiagram.model.toJson()将其传递给数据库。我想按下保存按钮,使用 Ajax 方法将图表保存到 PhP ,然后再保存到 mySQL 数据库。
感谢您的帮助!
这是我的保存脚本,但我无法弄清楚它为什么不起作用。
window.onload = function(){
jQuery(document).ready(function(){
$.ajax({
type: 'POST',
contentType: "application/json; charset=utf-8",
url: 'savemodel.php',
data: {json: JSON.stringify(modelJson)},
dataType: 'json'
})
.done( function( data ) {
console.log('done');
console.log(data);
})
.fail( function( data ) {
console.log('fail');
console.log(data);
})
});
//return modelJson;
}
function load() {
myDiagram.model = go.Model.fromJson(document.getElementById("mySavedModel").value);
// loadDiagramProperties gets called later, upon the "InitialLayoutCompleted" DiagramEvent
}
function loadDiagramProperties(e) {
var pos = myDiagram.model.modelData.position;
if (pos) myDiagram.position = go.Point.parse(pos);
}
}
我的php代码是:
<?php
header('Content-Type: application/json');
include 'config.php';
session_start();
error_reporting(E_ALL);
ini_set('display_errors', 1);
$session_id=$_SESSION['sess_user_id']; // User session id
$modelJson = $_POST['json'];
$sql = "INSERT INTO c_map
(ref_num, members_id, title, description, ingredients)
VALUES (NULL, '$session_id', 'title', 'description',
'".mysql_real_escape_string($modelJson)."');";
mysqli_query($connection, $sql);
?>
例如。命令myDiagram.model.toJson()的产生;这是一个有2个孩子的树形图,如下所示:
{ "class": "go.GraphLinksModel",
"modelData": {"position":"-545.114064532096 -44.69966023522102"},
"nodeDataArray": [
{"key":"Alpha"},
{"key":"N"},
{"key":"N2"}
],
"linkDataArray": [
{"from":"Alpha", "to":"N"},
{"from":"Alpha", "to":"N2"}
]}
我引用GoJs网站上的模型保存文档:
GoJS不要求您在任何特定介质中保存模型 格式。但因为这是JavaScript和JSON是最受欢迎的 数据交换格式,我们确实可以轻松地编写和读取模型 作为JSON格式的文本。
只需调用Model.toJson即可生成表示模型的字符串。 调用静态方法Model.fromJson来构造和初始化a 给出由Model.toJson生成的字符串的模型。许多样本 演示这个 - 搜索名为“save”的JavaScript函数 “加载”。大多数这些函数在页面上编写和读取TextArea 本身,以便您可以查看和修改JSON文本,然后加载它 获得一个新的图表。但是在编辑时请小心谨慎,因为JSON 语法非常严格,任何语法错误都会导致那些“加载” 功能失败。
JSON格式的文本对您的数据类型有严格的限制 可以代表没有额外的假设。保存和加载任何 您在节点数据(或链接数据)上设置的数据属性 需要满足以下要求:
该属性是可枚举的,其名称不以a开头 下划线(您可以使用以。开头的属性名称 下划线,但它们不会被保存)属性值不是 undefined并不是一个函数(JSON不能忠实地持有 函数)模型知道如何将属性值转换为JSON 格式(数字,字符串,JavaScript数组或纯JavaScript 对象)属性值是对象或数组形成树 结构 - 没有共享或循环引用Model.toJson和 Model.fromJson还将处理Point,Size,Rect,Spot的实例, 边距,几何和非图案画笔。不过我们建议这样做 您可以使用这些对象将这些对象存储在其字符串表示中 classes的解析和stringify静态函数。
因为您使用的是JavaScript,所以添加数据非常简单 属性到您的节点数据。这允许你关联任何东西 每个节点需要的信息。但如果你需要联想一些 模型的信息即使没有也会出现 根据节点数据,您可以向Model.modelData添加属性 宾语。该对象的属性将由Model.toJson编写 由Model.fromJson读取,就像编写节点数据对象一样 读取。