将 Json 作为变量加载到 jsTree 中
Loading Json as variable into jsTree
我在 Json 中使用 jstree。我的问题是我可以将 Json 直接提供给 jsTree 数据,但是当我将它作为变量传递时,它将打印整个 Json 字符串作为一个节点的标题。
下面是nodes.json
{
"id": "ajson1",
"parent": "#",
"text": "Simple root node"
}, {
"id": "ajson2",
"parent": "#",
"text": "Root node 2"
}, {
"id": "ajson3",
"parent": "ajson2",
"text": "Child 1"
}, {
"id": "ajson4",
"parent": "ajson2",
"text": "Child 2"
},
下面这段代码有效
request = $.getJSON("nodes.json");
var data;
request.complete(function() {
data = request.responseText;
console.log(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "sort", "types", "wholerow", "search"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': [{
"id": "ajson1",
"parent": "#",
"text": "Simple root node"
}, {
"id": "ajson2",
"parent": "#",
"text": "Root node 2"
}, {
"id": "ajson3",
"parent": "ajson2",
"text": "Child 1"
}, {
"id": "ajson4",
"parent": "ajson2",
"text": "Child 2"
}, ]
}
});
});
但是下面这个不行
request = $.getJSON("nodes.json");
var data;
request.complete(function() {
data = request.responseText;
console.log(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "sort", "types", "wholerow", "search"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': [data]
}
});
});
此外,如果您希望看到代码执行,我已将其托管在我的域中。
http://www.jordanmclemore.com/projects/jstree/test/visual/current.html
在你原来的问题中 data
是一个字符串(因为你使用的是 .responseText
),为了让它作为一个变量,你应该使用 JSON.parse
来转换字符串对象数组。
此致,
伊万
我知道你已经回答了你自己的问题,但我还是想告诉你这可能是什么原因。
在查看您提供给我们的 nodes.json 时,我不得不说它的格式不正确 JSON。它显然是一个数组,但不是这样格式化的。因此你有多个根元素,这是无效的 JSON.
如果您将 nodes.json 更改为:
[{
"id": "ajson1",
"parent": "#",
"text": "Simple root node"
}, {
"id": "ajson2",
"parent": "#",
"text": "Root node 2"
}, {
"id": "ajson3",
"parent": "ajson2",
"text": "Child 1"
}, {
"id": "ajson4",
"parent": "ajson2",
"text": "Child 2"
}]
在你的javascript中:
request = $.getJSON("nodes.json");
var data;
request.complete(function() {
data = request.responseText;
console.log(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "sort", "types", "wholerow", "search"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': data
}
});
});
我想你的问题早就解决了。
因为你的 'answer' 没有解决 JSON,我会说这是错误的答案,我建议你尝试我上面建议的事情。
顺便说一下,一个方便的工具可以用来验证你的 JSON 在未来:
http://jsonformatter.curiousconcept.com/
请注意,您可以也可以不必使用 $.parseJSON(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "types"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': {
'url': function(node) {
return 'nodes.json'
},
'data': function(node) {
return {
'id': node.id
};
}
}
}
});
我只是更密切地关注了 Ivan 的 JSTree API。他的 API 太棒了,密切关注它会让你省去很多麻烦。另外,我的 json 有一个尾部逗号,我相信它是无效的,所以我也必须修复它。我使用 json 验证器进行了测试。
我在 Json 中使用 jstree。我的问题是我可以将 Json 直接提供给 jsTree 数据,但是当我将它作为变量传递时,它将打印整个 Json 字符串作为一个节点的标题。
下面是nodes.json
{
"id": "ajson1",
"parent": "#",
"text": "Simple root node"
}, {
"id": "ajson2",
"parent": "#",
"text": "Root node 2"
}, {
"id": "ajson3",
"parent": "ajson2",
"text": "Child 1"
}, {
"id": "ajson4",
"parent": "ajson2",
"text": "Child 2"
},
下面这段代码有效
request = $.getJSON("nodes.json");
var data;
request.complete(function() {
data = request.responseText;
console.log(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "sort", "types", "wholerow", "search"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': [{
"id": "ajson1",
"parent": "#",
"text": "Simple root node"
}, {
"id": "ajson2",
"parent": "#",
"text": "Root node 2"
}, {
"id": "ajson3",
"parent": "ajson2",
"text": "Child 1"
}, {
"id": "ajson4",
"parent": "ajson2",
"text": "Child 2"
}, ]
}
});
});
但是下面这个不行
request = $.getJSON("nodes.json");
var data;
request.complete(function() {
data = request.responseText;
console.log(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "sort", "types", "wholerow", "search"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': [data]
}
});
});
此外,如果您希望看到代码执行,我已将其托管在我的域中。 http://www.jordanmclemore.com/projects/jstree/test/visual/current.html
在你原来的问题中 data
是一个字符串(因为你使用的是 .responseText
),为了让它作为一个变量,你应该使用 JSON.parse
来转换字符串对象数组。
此致, 伊万
我知道你已经回答了你自己的问题,但我还是想告诉你这可能是什么原因。
在查看您提供给我们的 nodes.json 时,我不得不说它的格式不正确 JSON。它显然是一个数组,但不是这样格式化的。因此你有多个根元素,这是无效的 JSON.
如果您将 nodes.json 更改为:
[{
"id": "ajson1",
"parent": "#",
"text": "Simple root node"
}, {
"id": "ajson2",
"parent": "#",
"text": "Root node 2"
}, {
"id": "ajson3",
"parent": "ajson2",
"text": "Child 1"
}, {
"id": "ajson4",
"parent": "ajson2",
"text": "Child 2"
}]
在你的javascript中:
request = $.getJSON("nodes.json");
var data;
request.complete(function() {
data = request.responseText;
console.log(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "sort", "types", "wholerow", "search"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': data
}
});
});
我想你的问题早就解决了。
因为你的 'answer' 没有解决 JSON,我会说这是错误的答案,我建议你尝试我上面建议的事情。
顺便说一下,一个方便的工具可以用来验证你的 JSON 在未来: http://jsonformatter.curiousconcept.com/
请注意,您可以也可以不必使用 $.parseJSON(data);
$.jstree.defaults.core.themes.responsive = true;
$('#tree').jstree({
plugins: ["checkbox", "types"],
"types": {
"file": {
"icon": "jstree-file"
}
},
'core': {
'data': {
'url': function(node) {
return 'nodes.json'
},
'data': function(node) {
return {
'id': node.id
};
}
}
}
});
我只是更密切地关注了 Ivan 的 JSTree API。他的 API 太棒了,密切关注它会让你省去很多麻烦。另外,我的 json 有一个尾部逗号,我相信它是无效的,所以我也必须修复它。我使用 json 验证器进行了测试。