это мой первый пост, так что если я что-то упустил, пожалуйста, будьте терпеливы
я использую библиотеку go-debug.js из GoJS чтобы сделать некоторые диаграммы в браузере, но я запускаю проблему с опцией сохранения. На этой диаграмме создается объект 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 (); которая представляет собой древовидную диаграмму с двумя детьми, будет выглядеть так:
{ "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, чтобы создать и инициализировать
Модель с учетом строки, созданной Model.toJson. Многие из образцов
продемонстрируйте это — найдите функции JavaScript с именем «save» и
«Нагрузка». Большинство из этих функций пишут и читают TextArea на странице
сам, так что вы можете увидеть и изменить текст JSON, а затем загрузить его
чтобы получить новую диаграмму. Но будьте осторожны при редактировании, потому что JSON
синтаксис очень строг, и любые синтаксические ошибки приведут к сбою этих функций загрузки.Текст в формате JSON имеет строгие ограничения на типы данных, которые вы
может представлять без дополнительных предположений. Сохранить и загрузить любой
свойства данных, которые вы устанавливаете для данных вашего узла (или данных связи), они
необходимо соответствовать следующим требованиям:свойство перечислимо и его имя не начинается с
подчеркивание (вы можете использовать имена свойств, которые начинаются с
подчеркивание, но они не будут сохранены) значение свойства не
не определено и не является функцией (JSON не может верно хранить
функции) модель знает, как преобразовать значение свойства в JSON
формат (числа, строки, массивы JavaScript или обычный JavaScript)
Объекты) значения свойств, которые Объекты или Массивы образуют дерево
структура — нет общих или циклических ссылок Model.toJson и
Model.fromJson также будет обрабатывать экземпляры Point, Size, Rect, Spot,
Края, геометрия и не шаблонные кисти. Однако мы рекомендуем
вы храните эти объекты в их строковых представлениях, используя те
Разбор классов и строковые статические функции.Поскольку вы используете JavaScript, добавление данных для вас тривиально
свойства к данным вашего узла. Это позволяет связать все
информация, которая вам нужна с каждым узлом. Но если вам нужно связать некоторые
информация с моделью, которая будет присутствовать, даже если нет
данные узла вообще, вы можете добавить свойства в Model.modelData
объект. Свойства этого объекта будут написаны Model.toJson и
читается Model.fromJson, так же, как записываются объекты данных узла и
читать.
Вам не нужно json_decode
это JSON, потому что он становится объектом.
Удалить эту часть:
$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)."');";
Других решений пока нет …