下面是ajax 加载ztree菜单,为什么异步读取不出来,  同步的就可以读出来,我调试过alert(data) 里面可以读取到值,前台
  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>test_ztree</title>
    <link href="zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />    <script src="script/jquery-1.4.2.js" type="text/javascript"></script>    <script src="script/jquery.ztree-2.6.js" type="text/javascript"></script>    <script type="text/javascript">
        var zTree;
        var setting = {
        fontCss : {color:"blue"},
        dragCopy : false,
        dragMove : false,
        editable: true,
        isSimpleData: true, 
        treeNodeKey: "Id",
        treeNodeParentKey: "PId", 
        nameCol: "Name",   
        showLine: true  
    };  
    $(document).ready(function() {
        refreshTree();
      })     //读取
    function refreshTree()
    {
        $.ajax({
        type: "POST",
        url: "Handler.ashx",
        data: "cmd=select",
        success: function(data) {
        alert(data)
        zTree = $("#tree").zTree(setting, data);
         }
        });
    }  
    </script></head>
<body>
    <form id="form1" runat="server">
    <div style="float: left">
        <ul id="tree" class="tree" style="width: 300px; height: 100%;">
        </ul>
    </div>
    </form>
</body>
</html>ashx处理页面
 
  if (type == "select")
        {
            string sql = "SELECT * FROM TreeNodes";
            List<string> treenodes = new List<string>();
            try
            {
                SqlDataReader reader = SqlHelper.ExecuteReader(SqlHelper.ConnString, CommandType.Text, sql, null);
                while (reader.Read())
                {
                    string node = string.Format("{{ 'Id':{0}, 'PId':{1}, 'Name':'{2}', 'url':'{3}' }}",
                        reader["NodeId"], reader["PId"], reader["Name"], reader["Url"]);
                    treenodes.Add(node);
                }                if (reader.IsClosed == false)
                    reader.Close();
            }
            catch (Exception ex)
            {
            }
            finally
            {            }
            string NodesData = "[" + string.Join(",", treenodes.ToArray()) + "]";
            context.Response.Write(NodesData);
        }

解决方案 »

  1.   

     string node = string.Format("{{ 'Id':{0}, 'PId':{1}, 'Name':'{2}', 'url':'{3}' }}",
                            reader["NodeId"], reader["PId"], reader["Name"], reader["Url"]);这句话,是不是多了两个前后大括号,应该是
     string node = string.Format("{ 'Id':{0}, 'PId':{1}, 'Name':'{2}', 'url':'{3}' }",
                            reader["NodeId"], reader["PId"], reader["Name"], reader["Url"]);吧
      

  2.   


    你错了,ztree就要这种 json格式的数组
      

  3.   


    键和值都改为双引号了 还是不行。
     string node = string.Format("{{ \"Id\":\"{0}\", \"PId\":\"{1}\", \"Name\":\"{2}\", \"url\":\"{3}\" }}",
                            reader["NodeId"], reader["PId"], reader["Name"], reader["Url"]);
      

  4.   

     string node = string.Format("[{ \"Id\":\"{0}\", \"PId\":\"{1}\", \"Name\":\"{2}\", \"url\":\"{3}\" }]",
      reader["NodeId"], reader["PId"], reader["Name"], reader["Url"]);json数组啊  
      

  5.   


    这样还是不对啊。我在string NodesData = "[" + string.Join(",", treenodes.ToArray()) + "]"; 转了 你看看
      

  6.   

    看下var zTree哪里有用到,异步的话只得等它返回zTree才有值。同步的话回等它返回后才继续执行下去
    他里面不是有异步的例子?
      

  7.   

    我的到的格式是这样的。
    [{ "Id":"1", "PId":"0", "Name":"电脑", "url":"ss" },{ "Id":"3", "PId":"0", "Name":"手机", "url":"s" },{ "Id":"4", "PId":"0", "Name":"冰箱 xcxc", "url":"sss" },{ "Id":"5", "PId":"0", "Name":"空调", "url":"sssss" },{ "Id":"6", "PId":"1", "Name":"宏碁", "url":"sss" },{ "Id":"7", "PId":"1", "Name":"华硕", "url":"sss" },{ "Id":"9", "PId":"6", "Name":"zzz1", "url":"sss" },{ "Id":"10", "PId":"3", "Name":"zzzz", "url":"sss" },{ "Id":"11", "PId":"3", "Name":"DDD", "url":"ssss" },{ "Id":"12", "PId":"11", "Name":"ZZ", "url":"dd" },{ "Id":"13", "PId":"6", "Name":"sss", "url":"xxx" }]异步不行, 同步的就行了
      

  8.   

    zTree1.reAsyncChildNodes(null, "refresh");
      

  9.   

    确定 zTree 是否通过异步方式获取 isParent = true,且没有子节点数据的父节点的子节点数据异步加载需要设置的其它参数,请注意下面的相关参数默认值:false
      

  10.   

    断点看下
    string.Format("{{ 'Id':{0}, 'PId':{1}, 'Name':'{2}', 'url':'{3}' }}",这一句得到的string
    {}和占位符一起用好像会用问题吧
      

  11.   

    加上dataType: "json"试试$.ajax({
            type: "POST",
            url: "Handler.ashx",
            data: "cmd=select",
            dataType: "json",
            success: function(data) {
            alert(data)
            zTree = $("#tree").zTree(setting, data);
             }
            });
      

  12.   

    同步没问题说明你的function没错, 异步不好用是什么情况?
    没有data?还是不trigger alert? 不trigger alert的话 看一下具体发什么request到Handler.ashx页了 直接输入到url里什么情况
      

  13.   

    alert(data) 里取到了值 而且值正确的, 是否是ztree的问题?
      

  14.   

    如果你确定同步和异步得到的data都是一样的话
    那还就真没有办法 zTree = $("#tree").zTree(setting, data);
    这句本身和是否同步,异步跟本没有关系。data已经拿到了,但是不显示,还是问ztree作者好了。