это мой первый пост, поэтому, если я пропустил что-нибудь, пожалуйста, будьте терпеливы :).
im, используя библиотеку go-debug.js от GoJS, чтобы сделать некоторые диаграммы в браузере, но im запускает проблему с возможностью сохранения. Эта диаграмма создает объект 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» и «load». Большинство этих функций записывают и читают TextArea на самой странице, поэтому вы можете видеть и изменять текст JSON, а затем загружать его, чтобы получить новую диаграмму. Но будьте осторожны при редактировании, потому что синтаксис JSON очень строгий, и любые синтаксические ошибки приведут к отказу функций «нагрузки».
Форматированный текст JSON имеет строгие ограничения на типы данных, которые вы можете представить без дополнительных предположений. Чтобы сохранять и загружать любые данные, заданные в данных узла (или данных канала), они должны отвечать следующим требованиям:
свойство перечислимо, и его имя не начинается с подчеркивания (вы можете использовать имена свойств, которые начинаются с подчеркивания, но они не будут сохранены), значение свойства не определено и не является функцией (JSON не может точно удерживать функции), модель знает, как преобразовать значение свойства в формат JSON (числа, строки, массивы JavaScript или объекты простого JavaScript) значения свойств, которые являются объектами или массивами, образуют древовидную структуру – без общих или циклических ссылок Model.toJson и Model .fromJson также будет обрабатывать экземпляры точек, размеров, прямоугольников, пятен, полей, геометрии и не-образных кистей. Однако мы рекомендуем хранить эти объекты в своих строковых представлениях, используя эти синтаксические разборки и строгие статические функции.
Поскольку вы используете 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)."');";