Как сделать, чтобы строка из pl/sql рассматривалась как ответ json при вызове ajax из FancyTree?

У меня проблема при заполнении дерева FancyTree через опцию вызова ajax. Источником страницы и данных дерева является пакет PL/SQL из базы данных Oracle 10. Я звоню tree_test.show_page и он использует htp.p чтобы отобразить эту простую тестовую страницу (ссылки на скрипты удалены для ясности):

<html>
<head>
<title>Tree Testing</title>
<script type="text/javascript">

  $(function() {
    // Create the tree inside the <div id="tree"> element.
    $("#tree").fancytree({
      checkbox: true, // Show checkboxes.
      debugLevel: 2,  // 0:quiet, 1:normal, 2:debug
      selectMode: 3,  // 1:single, 2:multi, 3:multi-hier
      source: {
        url: "tree_test.get_tree",
        dataType: "json",
        cache: true
      }
    }); // end of fancytree def
  });
</script>
</head>
<body>
<p>Tree structure:</p>
<div id="tree"></div>
</body>
</html>

Дерево не отображается, но в отладчике Chrome я вижу, куда звонить test_tree.get_tree был успешно сделан. Я предполагаю, что проблема в том, что строковый ответ не рассматривается как данные JSON. Я знаю, что данные хорошие, потому что если я добавлю var treeData = <JSON data here> и изменить FancyTree source параметр для source: treeDataработает нормально. И данные дерева предоставляются той же процедурой PL/SQL независимо от того, каким образом source Параметр настроен.

В отладчике Chrome он показывает тип содержимого ответа в виде text / html (см. Правку ниже). Я пробовал различные значения для dataType Параметр ("json", "html json", "text json", "html text json" и т. д.) не выполнен.

Я что-то упускаю из виду?

Ниже приведен пример данных JSON:

[{title: "Root Group", key: "g0", folder: true, expanded: true, children: [{title: "Group 1", key: "g1", folder: true, expanded: true, children: [{title: "Node 1", key: "141", tooltip: "Node 1"},{title: "Node 2", key: "82", tooltip: "Node 2"}]},{title: "Group 2", key: "g2", folder: true, expanded: true, children: [{title: "Node 3", key: "91", tooltip: "Node 3"}]}]}]

Редактировать:
По предложению йога я добавил owa_util.MIME_HEADER('application/json', true) к tree_test.get_tree процедура и теперь тип содержимого ответа показывает как application/json в отладчике Chrome. Но дерево все еще не заполняется данными.

1 ответ

Решение

Это не действительные данные JSON, а дамп объекта JavaScript:

[{title: "Root Group", key: "g0", folder: true, expanded: true, children: [{title: "Group 1", key: "g1", folder: true, expanded: true, children: [{title: "Node 1", key: "141", tooltip: "Node 1"},{title: "Node 2", key: "82", tooltip: "Node 2"}]},{title: "Group 2", key: "g2", folder: true, expanded: true, children: [{title: "Node 3", key: "91", tooltip: "Node 3"}]}]}]

так должно быть

[{"title": "Root Group", "key": "g0", "folder": true, ...

Смотрите http://json.org/

Другие вопросы по тегам