Struts2 + zTree 异步加载树疑难问题,请教为什么出现undefined

yihaitao 发布于 2015/08/24 12:27
阅读 2K+
收藏 0

@zTree 你好,想跟你请教个问题:

Struts2 +Json + Hibernate + Spring + zTree 异步加载疑难问题,请教为什么出现undefined

最近用Struts2 + zTree v3.5 异步加载问题

第一次加载数据显示都很正常。数据库有字段isParent子段。为true的都会有子节点嘛。

传入,和返回json数据都是正确的

var setting = {

            data: {

                simpleData: {

                    enable: true,//后台返回的就是个ArrayList                   

                    idKey: "mid",

                    pIdKey: "pid",

                    rootPId: 0

                }

            },

            async: {

                enable: true,

                url:"menuitemAction_showMenuitemsByPid.action",//点击树结构+时的加载。发现每次点击+加载。第一次不会调用这里代码

                autoParam:["mid=pid"]

            }

};

        $(document).ready(function(){

            $.post("menuitemAction_showMenuitemsByPid.action", { pid : 0 }, function(data){

                zNodes = data.menuitemList;

                //第一次加载初始化数据

                zTreeObj = $.fn.zTree.init($("#menuTree"), setting, zNodes);

            });

       });

加载数据都需要带pid这个参数。第一次我加载数据库初始化数据,能够展现出树。


每次当我点击+加载二级树时。已经返回了正确的json数据。二级菜单也显现出来了。但是不知道为什么

每个子节点总是多出个undefined

将异步加载的数据给onAsyncSuccess处理。将返回的数据添加到当前点击的节点下面。

callback: {

                //beforeClick: beforeClick,

                //beforeAsync: beforeAsync,

                //onAsyncError: onAsyncError,

                onAsyncSuccess: onAsyncSuccess

            }

function onAsyncSuccess(event, treeId, treeNode, data){

    var zNodes = eval("(" + data + ")");  

    //alert("2 : "+zNodes);

    //alert("2 : "+zNodes.menuitemList);

    $.fn.zTree.getZTreeObj("menuTree").addNodes(treeNode, zNodes.menuitemList);

}


加载中
0
爱吃水煮鱼

  url:"menuitemAction_showMenuitemsByPid.action",//点击树结构+时的加载。发现每次点击+加载。第一次不会调用这里代码

第一次 也要调用这个吧 我记得是的,你还在

 $.post("menuitemAction_showMenuitemsByPid.action", { pid : 0 }, 

这个没用吧 

0
yihaitao
yihaitao

$.post("menuitemAction_showMenuitemsByPid.action", { pid : 0 }, function(data){

                zNodes = data.menuitemList;//第一次调用这里的action

                zTreeObj = $.fn.zTree.init($("#menuTree"), setting, zNodes);

            });


 async: {

                enable: true,

                url:"menuitemAction_showMenuitemsByPid.action",//点击树结构+时的加载。发现每次点击+加载。第一次不会调用这里代码。第二次就开始调用这里的action

                autoParam:["mid=pid"]

我测试过按照我上面的写法。的

 url:"menuitemAction_showMenuitemsByPid.action这里第一次没有调用。从第二次开始调用。

但是如果上述的代码改成$(document).ready(function(){
    treeObj = $.fn.zTree.init($("#menuTree"), setting);
}

这样就每次会调用url:"menuitemAction_showMenuitemsByPid.action

但是我第一次就需要传递参数。我不知道第一次进入该页面如何传参?所以我改

$.post("menuitemAction_showMenuitemsByPid.action", { pid : 0 },传递了一个

参数。此时第一次树展现出来后 autoParam:["mid=pid"]这里就有值了。如果不改,第

一次进入页面pid根本没有值

0
爱吃水煮鱼
第一次的时候 判断在action里面判断一下就行了,没必要再次弄个ajax
0
bestpray
bestpray
我也遇到同样(一模一样)的问题,请问你是怎么解决的呢?
0
n
napster0102
原因没有找到。我的解决方法是,setting项中的async:{}的设置中添加dataFilter项,对应的方法可以不写方法体。
返回顶部
顶部