这是我的第一篇文章,因此,如果我错过任何内容,请耐心等待:)。
我使用GoJS的go- debug.js库在浏览器上绘制了一些图表,但我在保存选项上遇到了问题。该图产生一个JavaScript对象,您可以通过此命令 myDiagram.model.toJson() 将其转换为Json并将其传递给数据库。我想按保存按钮将使用 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();的产生;这是一个有两个孩子的树形图,如下所示:
{ "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.toJson生成的字符串,调用静态方法Model.fromJson来构造和初始化模型。许多示例演示了这一点- 搜索名为“ save”和“ load”的JavaScript函数。这些功能大多数都在页面本身上编写和读取TextArea,以便您可以查看和修改JSON文本,然后加载它以获取新图。但在编辑时请谨慎,因为JSON语法非常严格,任何语法错误都将导致这些“加载”功能失败。 JSON格式的文本对无需额外假设就可以表示的数据类型有严格的限制。要保存和加载您在节点数据(或链接数据)上设置的任何数据属性,它们需要满足以下要求: 该属性是可枚举的,并且其名称不是以下划线开头(您可以使用以下划线开头的属性名称,但不会被保存)该属性值并非未定义且不是函数(JSON无法如实保存)函数)模型知道如何将属性值转换为JSON格式(数字,字符串,JavaScript数组或纯JavaScript对象),这些属性值是对象或数组形成树形结构- 没有共享或循环引用Model.toJson和Model .fromJson还将处理“点”,“大小”,“矩形”,“斑点”,“边距”,“几何”和“非图案画笔”的实例。但是,我们建议您使用这些类的解析和字符串化静态函数将它们存储在它们的字符串表示形式中。 因为使用的是JavaScript,所以将数据属性添加到节点数据很简单。这使您可以将所需的任何信息与每个节点相关联。但是,如果您需要将某些信息与模型相关联,即使根本没有节点数据,这些信息也将存在,则可以向Model.modelData对象添加属性。该对象的属性将由Model.toJson编写,并由Model.fromJson读取,就像写入和读取节点数据对象一样。
GoJS不需要您以任何特定的介质或格式保存模型。但是因为这是JavaScript,而JSON是最流行的数据交换格式,所以我们确实使以JSON格式的文本形式编写和读取模型变得容易。
只需调用Model.toJson即可生成表示您的模型的字符串。给定由Model.toJson生成的字符串,调用静态方法Model.fromJson来构造和初始化模型。许多示例演示了这一点- 搜索名为“ save”和“ load”的JavaScript函数。这些功能大多数都在页面本身上编写和读取TextArea,以便您可以查看和修改JSON文本,然后加载它以获取新图。但在编辑时请谨慎,因为JSON语法非常严格,任何语法错误都将导致这些“加载”功能失败。
JSON格式的文本对无需额外假设就可以表示的数据类型有严格的限制。要保存和加载您在节点数据(或链接数据)上设置的任何数据属性,它们需要满足以下要求:
该属性是可枚举的,并且其名称不是以下划线开头(您可以使用以下划线开头的属性名称,但不会被保存)该属性值并非未定义且不是函数(JSON无法如实保存)函数)模型知道如何将属性值转换为JSON格式(数字,字符串,JavaScript数组或纯JavaScript对象),这些属性值是对象或数组形成树形结构- 没有共享或循环引用Model.toJson和Model .fromJson还将处理“点”,“大小”,“矩形”,“斑点”,“边距”,“几何”和“非图案画笔”的实例。但是,我们建议您使用这些类的解析和字符串化静态函数将它们存储在它们的字符串表示形式中。
因为使用的是JavaScript,所以将数据属性添加到节点数据很简单。这使您可以将所需的任何信息与每个节点相关联。但是,如果您需要将某些信息与模型相关联,即使根本没有节点数据,这些信息也将存在,则可以向Model.modelData对象添加属性。该对象的属性将由Model.toJson编写,并由Model.fromJson读取,就像写入和读取节点数据对象一样。
您不需要json_decode此JSON,因为它已成为对象。 删除此部分:
json_decode
$directions = json_decode($_POST['json']); var_dump(directions); // here's an error btw
并将其更改为:
$directions = $_POST['json'];
然后只需将其保存为文本模式即可。 不要忘记逃避它:
$sql = "INSERT INTO c_map (ref_num, members_id, title, description, ingredients) VALUES (NULL, '$session_id', 'title', 'description', '".mysql_real_escape_string($directions)."');";