下面是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);
}
<%@ 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);
}
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"]);吧
你错了,ztree就要这种 json格式的数组
键和值都改为双引号了 还是不行。
string node = string.Format("{{ \"Id\":\"{0}\", \"PId\":\"{1}\", \"Name\":\"{2}\", \"url\":\"{3}\" }}",
reader["NodeId"], reader["PId"], reader["Name"], reader["Url"]);
reader["NodeId"], reader["PId"], reader["Name"], reader["Url"]);json数组啊
这样还是不对啊。我在string NodesData = "[" + string.Join(",", treenodes.ToArray()) + "]"; 转了 你看看
他里面不是有异步的例子?
[{ "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" }]异步不行, 同步的就行了
string.Format("{{ 'Id':{0}, 'PId':{1}, 'Name':'{2}', 'url':'{3}' }}",这一句得到的string
{}和占位符一起用好像会用问题吧
type: "POST",
url: "Handler.ashx",
data: "cmd=select",
dataType: "json",
success: function(data) {
alert(data)
zTree = $("#tree").zTree(setting, data);
}
});
没有data?还是不trigger alert? 不trigger alert的话 看一下具体发什么request到Handler.ashx页了 直接输入到url里什么情况
那还就真没有办法 zTree = $("#tree").zTree(setting, data);
这句本身和是否同步,异步跟本没有关系。data已经拿到了,但是不显示,还是问ztree作者好了。