Я пытаюсь сгенерировать альтернативный код JSON для jstree в моем контроллере PHP.
Я создаю то, что выглядит как правильные данные, однако jstree не отображает их.
Мой JavaScript выглядит так:
$this->registerJs("$(function() {
$('#statustree').jstree({
'core' :
{
'data' :
{
'datatype' : 'json',
'url' : '/myaccount/buildstatustree',
}
}
});
$('#statustree').on('loaded.jstree', function()
{
$('#statustree').jstree('open_all');
});
})
", \yii\web\VIEW::POS_READY);
и мой PHP выглядит так:
// convert to JSON format for jstree
$tree = array();
$parent = new stdClass();
$parent->id = 'P1';
$parent->parent = '#';
$parent->text = $username;
$tree[] = $parent;
$student1 = new stdClass();
$student1->id = 'S1';
$student1->parent = 'P1';
$student1->text = 'Poly';
$tree[] = $student1;
$student1 = new stdClass();
$student1->id = 'S2';
$student1->parent = 'P1';
$student1->text = 'Bob';
$tree[] = $student1;
// convert to json and send
header('Content-type: application/json');
return json_encode( $tree );
Мой контроллер вызывается и возвращает строку, которая выглядит следующим образом:
[
{"id":"P1","parent":"#","text":"user2"},
{"id":"S1","parent":"P1","text":"Poly"},
{"id":"S2","parent":"P1","text":"Bob"}
]
Во время вызова спиннер вращается, но счетчик исчезает, и мое дерево не отображается …
Я подозреваю, что не правильно формирую свой альтернативный ответ JSON, но все, что я пытаюсь сделать, не работает ….
Спасибо
-John
Генерируемые вами данные выглядят хорошо (при условии, что вы видите это в своих инструментах разработки как ответ на вызов AJAX, который делает jsTree).
Возможно, вы захотите проверить, все ли заголовки в порядке — действительно ли он служит JSON? Вы также можете попробовать добавить кодировку на всякий случай:
header('Content-Type: application/json; charset=UTF-8');
Я вижу, вы уже пытаетесь заставить jQuery обрабатывать ответ как JSON независимо от заголовков, но используйте "dataType"
вместо "datatype"
,
Если это не работает — поделитесь, пожалуйста, тем, что вы видите на сетевой панели консоли разработчика, — заголовками и ответом на AJAX-вызов jsTree.
Других решений пока нет …