JSON格式正确。界面却不显示!求助~~~~~~~~~~~~~~~
ztree吧
全部回复
仅看楼主
level 5
很拽d土豆 楼主
下面是我的JS方法。
$.post("${ctx}/user/resource!list.do",
function (d) {
var da=JSON.stringify(d);
if (d.length > 0) {
var setting = {
data:{
simpleData:{
enable:true
}
}
};
var da=JSON.stringify(d);//d是我在后台用JSON封装过来的数据。在这里转换成字符串。默认是对象。
document.write(da);//打印到界面正常,和下面的d值是一样的。却不能显示结果。界面没有任何输出。请问作者大哥怎么办。有没有什么解决方法。实在是想不通了。
//这个d是我手工强制写在这里的,在界面却显示正常。
d=[{"id":0,"name":"运维管理平台","pId":-1},
{"id":10,"name":"2级菜单","pId":9,"url":"#"},
{"id":11,"name":"2级菜单","pId":9,"url":"#"},
{"id":12,"name":"测试3","pId":-1,"url":"#"},
{"id":13,"name":"2级菜单","pId":12,"url":"#"},
{"id":14,"name":"3级菜单","pId":13,"url":"#"}];
$(document).ready(function () {
$.fn.zTree.init($("#ztree"), setting,d);
});
}
2012年02月24日 12点02分 1
level 5
很拽d土豆 楼主
加班到现在也没整出来。郁闷。想不通。
2012年02月24日 14点02分 2
level 11
请你好好理解一下异步加载的过程吧。 然后再理解一下 onDomReady (也就是 jQuery这个 ready)是什么意思。
我们写代码再着急也不能硬堆,还是要适当理解其原理的。
关于异步加载请参考 我官网上 常见问题中 的 最后一个 异步加载的说明。这里不能贴 url,抱歉了。
2012年02月24日 15点02分 3
level 5
很拽d土豆 楼主
有QQ么。可以加我QQ:475589699。这里问问题真不方便。不能保证联系到人。着急。如果是dtree我早做出来了。刚接触ztree,见谅见谅。
2012年02月24日 15点02分 4
level 5
很拽d土豆 楼主
[揉脸]我一直在做JAVA后台。说实话这些基础的我都忘得差不多了。汗颜。。。ready方法是在DOM模型加载完后触发的,而onload却是在界面加载完毕后才触发的。晕死。看来我写反了。而且我觉得。我应该都写在ready里面。嘿嘿。先试试。
2012年02月24日 15点02分 5
level 11
抱歉,现在公司都不能QQ,平时也很少上,就这里沟通吧,再不行就 email。周末不能保证很及时的答复。
个人觉得你这没调出来一方面是对 zTree 的不熟悉,另一方面是有些心急,还有一点请你学者善用 chrome 的调试工具进行调试和跟踪。
再把前面的答复说的明白一些吧:
你知不知道为何要把 $(document).ready 这个部分代码放在 ajax 返回结果后执行??
请问 $(document).ready 的功能是什么?
2012年02月24日 15点02分 6
level 11
[呵呵] 希望你能自己修改成功! 每一次突破都会让自己的经验值迅猛提升!
2012年02月25日 12点02分 8
level 5
很拽d土豆 楼主
[汗]不是吧。。。要是放在ajax返回值之前,怎么可能获取到ajax获取到的后台数据。ready的功能我上面说了啊。呵呵。顺便说一句,昨晚我用struts2+hibernate3+ztree3已经整出来了。唉。很久已前我很傻,不知道dtree,ztree这些玩意,自己跑去写了一个tree,只实现了简单的无限节点和左边的虚线功能。不过用的方法却是非常笨的。后来才发现网上有写好的东东,以后没接触前端开发就没弄了。直接最近要写一个管理界面。决定恶补一下JS。ztree不错不错。
上次我说刷新后节点恢复回默认展开状态不能保存,保存到cookie的确容量有限。我觉得如果做一个小的tree还行。像我这个就足够了。
我还有一个建议,就是路径问题。这个说实话太麻烦,如果我url:user/user!list.action.映射到界面时变为了:项目名称/main/index/user/user!list.action 不知道为何它会加上main/index这个路径。而如果我用绝对路径则可以解决这个问题。比如:URL:/项目名称/user/user!list.action界面显示的结果就是:项目名称/user/user!list.action这个就是对的。可惜如果这样做就不通用了。万一我的项目改名了,数据库中相应的URL也必须更改。同样的问题也出现在img/diy中,这个路径太长,我觉得这样更改可以方便管理:
在setting中配置默认的图片根目录和项目名称,这样更改了项目名称时只要在此处配置相应的项目名即可。至于图片名称就更方便了。比如之前写成
iconOpen:'js/jquery/plugins/ztree/style/img/diy/open.png',
iconClose:'js/jquery/plugins/ztree/style/img/diy/close.png'
如果我在上面配置一个默认的路径:
var iconpath=js/jquery/plugins/ztree/style/img/diy/';
那我下面可以写成:
iconOpen:iconpath+'open.png',
iconClose:iconpath+'close.png',
如果我的图片很多,这种方法节约了不少代码量。ztree的示例就可以精简不少。因为我看ztree都是../../很长的路径的。
我觉得这3个地方如果都改进了,我的意思是在setting里面配置好这些,配置就会变得更灵活。我们只要从数据库读取数据,这些功能在ztree.core.js里面自己帮我们做好就再好不过了,当然目前我只用到了这些,对于其它功能目前也没研究。我是这样想的。只好自己写上这些配置了。哈哈,希望ztree变得更好!赞一个!
2012年02月25日 12点02分 9
level 5
很拽d土豆 楼主
贴一下我的代码!希望可以帮到有些人。我用的是JSON传递。非常简洁。
private static final Random r=new Random();
   //可配置的,希望ztree可以将这个配置直接放到js里面。
private static final String context="/monitorManage";//项目名称
private static final String contextImage="/monitorManage/js/jquery/plugins/ztree/zTreeStyle/img/diy/";//图片路径
@Override
public String list() throws Exception {
List<Mor_User_Resources> urs=urManager.getAll();
JSONArray array=new JSONArray();
for (Mor_User_Resources ur : urs) {
JSONObject json=new JSONObject();
json.put("id", ur.getMenuid());
json.put("pId", ur.getParentid());
json.put("name", ur.getMenuname());
json.put("url", context+ur.getUrl());
json.put("icon", ur.getIconpath());
json.put("target", ur.getTarget());
if(ur.getParentid()==-1){//如果是1级节点,默认展开
json.put("open", true);
json.put("iconOpen", contextImage+"1_open.png");
json.put("iconClose", contextImage+"1_close.png");
}
array.add(json);
}
System.out.println(array.toJSONString());
this.renderJson(array.toString());
return null;
}
//JS界面显示
<script type="text/javascript">
$(document).ready(function () {
$.post("${ctx}/user/resource!list.do",
function (d) {
var da=JSON.stringify(d);
if (d.length > 0) {
var setting = {
data:{
simpleData:{
enable:true
}
}
};
$.fn.zTree.init($("#ztree"), setting,d);
}
});
});
</script>

2012年02月25日 13点02分 11
level 5
很拽d土豆 楼主
做JAVA什么业务的。加JAVA技术群:204768834
2012年02月25日 13点02分 12
level 11
:) 感谢你的热心。不过。。。我要提醒你一下:
1、iconOpen 和 iconClose 这两个是属于节点自定义的属性,zTree 是不去操心的哟,你自己提炼出省心的方法这样很好。说明你是在认真思考的!另外,你也从我的角度考虑一下,如果我把每个人这种特殊情况都提取出来加到 setting中去的话,那可是会很庞大的了。
2、你为何不考虑 iconSkin 属性呢?? 我觉得这个会更加方便,你只需要在 节点数据中设定图标的 className 即可,剩下的路径什么的,你只需要在 css 中设置即可,而且对于 css文件来说,直接设定相对路径即可! 灰常灰常的方便。
以后如果使用中还有什么问题或想法,还请继续沟通吧!没有大家在使用中的各种反馈, zTree 绝对不会做到今天这样子的。
2012年02月25日 13点02分 13
level 5
很拽d土豆 楼主
我还有一个建议,就是路径问题。这个说实话太麻烦,如果我url:user/user!list.action.映射到界面时变为了:项目名称/main/index/user/user!list.action 不知道为何它会加上main/index这个路径。而如果我用绝对路径则可以解决这个问题。比如:URL:/项目名称/user/user!list.action界面显示的结果就是:项目名称/user/user!list.action这个就是对的。可惜如果这样做就不通用了。万一我的项目改名了,数据库中相应的URL也必须更改。所以我不希望写死。我希望它是跟随我的项目变化而变化的。所以应该用相对路径。可是我不知道ztree到底怎么处理的。为什么会在路径后面加上其它路径。
你还没有回答我这个问题呀。。。这个路径问题怎么解决?有点疑惑。
2012年02月27日 01点02分 14
level 5
很拽d土豆 楼主
老大,我的这个问题可不可以解决呢。[抖胸]
2012年02月27日 03点02分 15
level 11
呵呵,忽略了,把这个url 和 图标的混在一起啦。 url 这个更简单了,你利用 setting.async.url 的 function 功能不就得了? 自己顶一个公式在function 里面随便拼接不就得了?
2012年02月27日 06点02分 16
level 5
你可以在Action中不需要json序列化的对象的get方法前加 @JSON(serialize=false)
2012年02月27日 07点02分 17
level 5
很拽d土豆 楼主
我的Action里面只有:
public String list() throws Exception {
List<UserTrees> urs = urManager.getAll();
Assert.assertNotNull(urs);
this.renderJson(JSON.toJSONString(urs));
return null;
}
代码。我已经精简了。[鲁拉]
2012年02月27日 07点02分 18
level 5
很拽d土豆 楼主
setting.async.url的function功能是什么意思???
看不太懂。。。有例子么?
2012年02月27日 07点02分 19
level 11
API 中有例子呀!
function getAsyncUrl(treeId, treeNode) {
return treeNode.isParent ? "nodes1.php" : "nodes2.php";
};
var setting = {
async: {
enable: true,
url: getAsyncUrl,
autoParam: ["id", "name"]
}
};
这个真的看不懂吗??
2012年02月27日 13点02分 20
level 5
Action里面就Throw Exception啊,最好用try{}catch。。
2012年02月27日 13点02分 21
level 6
我觉得你错了,你异步提交的时候返回的 是一个 json的字符串,我原来也是这个问题,javasctipt是识别不了这个字符串为object的,你要用JSON.parse(data);方法,把json字符串转成object那树形应该就出来了
2012年03月06日 07点03分 22
1 2 尾页