【发布时间】:2015-05-15 12:19:25
【问题描述】:
我在从我的 servlet 获取 JSON 字符串、通过我的 JSP 页面到我的 JavaScript 并导入到 Vakata/JStree 中时遇到了一些问题。
这就是我当前代码的样子。
小服务程序:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Du är nu i DoGet MarketDataServlet");
TreeBranchStringBuilder tbsb = new TreeBranchStringBuilder();
request.setAttribute("marketgrouplistJSONString", tbsb.getTreeBranchString(mm.getAllMarketgroups(), im.getAllItems()));
request.getRequestDispatcher("/marketdata.jsp").forward(request, response);
}
JSP/HTML:
<div id="market_tree_branches">
</div>
<div id="hidden"><%= request.getAttribute("marketgrouplistJSONString") %></div>
JavaScript:
var marketnitemsString = $("#hidden").text();
console.log(marketnitemsString)
$('#market_tree_branches').jstree({
'core' : {
'data' : marketnitemsString
}
});
从我的 JSP 生成的字符串如下所示:
[{"id":2,"text":"Blueprints","parent":"#"},{"id":204,"text":"Ships","parent":"2"},{"id":209,"text":"Ship Equipment","parent":"2"},{"id":211,"text":"Ammunition \u0026 Charges","parent":"2"},{"id":357,"text":"Drones","parent":"2"},{"id":943,"text":"Ship Modifications","parent":"2"},{"id":1041,"text":"Manufacture \u0026 Research","parent":"2"},{"id":1338,"text":"Structures","parent":"2"},{"id":9,"text":"Ship Equipment","parent":"#"},{"id":10,"text":"Turrets \u0026 Bays","parent":"9"}]
这是我在 Chrome 控制台日志中遇到的错误:
Uncaught Error: Syntax error, unrecognized expression:
[{"id":2,"text":"Blueprints","parent":"#"},{"id":204,"text":"Ships","parent":"2"},{"id":209,"text":"Ship Equipment","parent":"2"},{"id":211,"text":"Ammunition \u0026 Charges","parent":"2"}, ........
我猜测在将其从 JSP/HTML 发送到 JavaScript 变量的过程中出现了问题,但我无法弄清楚是什么,因为 JStree 无法将其作为变量读取。但是,如果我将整个字符串从 HTML 复制/粘贴到“数据”中:它可以正常工作。
【问题讨论】:
-
对 jsTree 不太熟悉,但您可能需要在加载 JSON 之前将其解析为 JS 对象。另外,为什么要使用隐藏字段而不是普通的 AJAX 调用?仅此一项就可以解决您的问题。
-
试过 JSON.parse() 它,但没有帮助。据我了解,JStree 接受 2 种输入方式 1. JSON/Arrays 遵循一个结构,父母需要知道它是 JSON/Array 中的孩子。 2. 但是,使用字符串方法,可以按照我们从数据库中完成关系的方式来完成。孩子们知道他们的父母,因此“父母”:attrib.
-
好的,经过更多的谷歌搜索,最后更多的试验和错误,看起来 JSON.parse(marketnitemsString) 确实有效。我 100% 确定我尝试了几次,但没有。然而,我可能只用我的完整字符串而不是我的小测试字符串尝试了它。因为当我尝试使用那个时,一切都会变得糟糕。
标签: java javascript json jsp servlets