В настоящее время код работает отлично. Просто я хочу, чтобы для каждого пользователя была другая древовидная диаграмма. Поэтому я должен передать $ user в getData.php, чтобы данные json создавались в соответствии с этим пользователем, а затем с диаграммой. $ user используется в выражениях mysql select в getData.php для выбора данных из базы данных, и эти выбранные данные затем преобразуются в json.
Скажите, пожалуйста, как мне передать $ user в качестве обратного вызова, в котором функция d3. Я из своих ресурсов!
var queryString = window.location.search;
var url = "d3js/getData.php" + queryString;
d3.json(url, function(error, treeData) {
console.log(treeData)
root = treeData[0];
update(root);
});
В конце getData.php есть
header('Content-Type: application/json');
echo json_encode($tree);
Поэтому я думаю, что выход php файла - это данные json
d3.json("api.php", function(error, data) {
data.forEach(function(d) {
loop your datas;
});
Подробнее смотрите здесь
https://phpro.org/tutorials/Creating-Graphs-With-PHP-MySQL-D3JS.html
https://nyquist212.wordpress.com/2014/04/09/d3-js-live-dashboard-example/
http://www.d3noob.org/2013/02/using-mysql-database-as-source-of-data.html
Функция d3.json
используется для получения данных из json файла, который не работает для файлов PHP, который возвращает ответ, отличный от json-формата.
Вы можете использовать API-интерфейс d3-request. При обратном вызове вы можете отобразить график: Пример:
var url = "d3js/getData.php" + window.location.search;
d3.request(url)
.get(function(error, treeData) {
console.log(treeData)
root = treeData[0];
update(root);
});
Ссылка: https://github.com/d3/d3-request/blob/master/README.md#request
Для получения дополнительной информации - https://github.com/d3/d3/blob/master/API.md
Вы также можете использовать эту функцию для получения карт ваших значений:
d3.layout.stack()(['value'].map((value) => {
return data.map((d: any) => {
return { x: obj[d.xAxis], y: d.value };
});
}));
Вы также можете увидеть больше примеров here-
Код, который я использую:
function upL(l_id) {
d3.json("lsel.php?l_id=" + l_id, function(error, gr) {
if (error) {
return console.error(error)
} else
console.log(gr);
draw(gr)
}).header("Content-Type", "application/x-www-form-urlencoded")//this bit might be necessary
}
function draw(gr){create graph...}
(l_id - пользовательская переменная)
Итак, ваш взгляд выглядит хорошо, попробуйте добавить тип контента (.header(...)), и если treeData будет зарегистрирован на консоли, проблема может быть в том, как вы обращаетесь к нему.
Для начала вам нужно экспортировать свои данные в json файл, например data.json
d3.json() ожидает, что json файл не является файлом php.
d3.json("data.json", function(error, data) {
if (error) throw error;
...
});