网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 网页素材 > AJAX代码 > 正文
Ajax+dtree实现动态加载无刷新树
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: Admin 发布时间: 09/04/17

  今天研究了很久,终于把动态加载无刷新树给整出来了,反正刚开始也是在网上搜了很多东东,但感觉都不太方便,最后找到了dtree,又发现一位朋友把dtree的源代码进行了更改,(dtree发布于2003年,那时编写这个javascript脚本的作者估计还不知道ajax这玩意吧,呵呵),就可以实现无刷新动态加载了,废话不说,先把例子整理出来先!

  首先是Sql脚本(MSSQL)

  IF EXISTS (SELECT * FROM SYSOBJECTS WHERE NAME=''PERMISSION'')

  DROP TABLE PERMISSION

  CREATE TABLE PERMISSION

  (

  PERMISSION_ID INT IDENTITY PRIMARY KEY,

  PERMISSION_NAME VARCHAR(20) NOT NULL,

  PARENT_ID INT

  )

  GO

  ALTER TABLE PERMISSION ADD CONSTRAINT FK_PARENTID FOREIGN KEY(PARENT_ID)  REFERENCES PERMISSION(PERMISSION_ID)

  GO

  SELECT * FROM PERMISSION

  --根目录,树开始的地方

  INSERT INTO PERMISSION(PERMISSION_NAME) VALUES (''根目录'')

  --根目录下的子节点

  INSERT INTO PERMISSION VALUES (''个人事物'',1)

  INSERT INTO PERMISSION VALUES (''公共信息'',1)

  INSERT INTO PERMISSION VALUES (''工作流程'',1)

  INSERT INTO PERMISSION VALUES (''综合行政'',1)

  INSERT INTO PERMISSION VALUES (''系统管理'',1)

  --以下元素为 个人事物 的子节点

  INSERT INTO PERMISSION VALUES(''日程安排'',2)

  INSERT INTO PERMISSION VALUES(''个人考勤'',2)

  INSERT INTO PERMISSION VALUES(''工作日志'',2)

  INSERT INTO PERMISSION VALUES(''内部短信'',2)

  INSERT INTO PERMISSION VALUES(''内部短信'',2)

  INSERT INTO PERMISSION VALUES(''个人设置'',2)

  --以下为 个人设置 的子节点

  INSERT INTO PERMISSION VALUES(''个人资料'',12)

  INSERT INTO PERMISSION VALUES(''密码修改'',12)

  INSERT INTO PERMISSION VALUES(''权限信息'',12)

  --以下为工作流程的子节点

  INSERT INTO PERMISSION VALUES(''新建工作流程'',4)

  INSERT INTO PERMISSION VALUES(''待办工作流程'',4)

  INSERT INTO PERMISSION VALUES(''设计工作流程'',4)

  ---用来测试的

  select permission_id,permission_name,count(permission_id) from permission where 1=1 and parent_id is null group by permission_id,permission_name

  然后呢,就是修改后的dtree脚本了,这里只放修改后的部分。。。

  // Add by xiaosilent .

  // get child nodes from web server via AJAX automatically

  // pid : parentID.

  dTree.prototype.getChildren = function(pid)...{

  var ajax = null;

  if (window.ActiveXObject) ...{

  try...{

  ajax = new ActiveXObject("Microsoft.XMLHTTP");

  }catch(e)...{

  alert("??????Microsoft.XMLHTTP???è±??¤±è??,AJAX???è????????è??è??.è?·????????¨??????è§???¨è?????.");

  }

  } else ...{

  if (window.XMLHttpRequest) ...{

  try...{

  ajax = new XMLHttpRequest();

  }catch(e)...{

  alert("??????XMLHttpRequest???è±??¤±è??,AJAX???è????????è??è??.è?·????????¨??????è§???¨è?????.");

  }

  }

  }

  // following is just for xiaosilent''s Sales Management System.

  // Server gives me a message like this : id1,name1,childCount1|id2,name2,childCount2|...

  // var url ="/servlet/category?action=getChildren&parentID=" + pid +"&type=" + this.type;

  var url="treeServlet?parentId="+pid;

  // use this to get this dTree object in the following function.

  var tree=this;

  ajax.onreadystatechange = function () ...{

  if (ajax.readyState == 4&&ajax.status == 200) ...{

  if(ajax.responseText=="false")

  ...{

  return;

  }

  var categories=ajax.responseText.split(''|'');

  for(var i=0;i<categories.length;i++)...{

  var aCat = categories[i].split('','');

  if(aCat.length==3)...{

  var id=aCat[0];

  var name=aCat[1];

  var childCount=aCat[2];

  // set different icon for a node, if it has a child set its icon to be a folder image , else default , set to be a file image. And set different link address.

  if(childCount>0)...{

  tree.add(id, pid, name, "javascript:"+tree.obj+".getChildren("+id+")", "??????è?·??????????±?",'''',tree.icon.folder);

  }else...{

  tree.add(id, pid, name, "javascript:"+tree.obj+".showCategory("+id+")", "??????è?·???è??è?·");

  }

  }

  }

  tree.show();

  tree.openTo(pid);

  }

  };

  ajax.open("POST",url);

  ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

  ajax.send(null);

  }

  dTree.prototype.showCategory = function()...{

  }

  // Add by xiaosilent.

  // Call to show the tree .

  dTree.prototype.show = function()...{

  // Renew the two array to save original data.

  this.aNodes=new Array();

  this.aIndent=new Array();

  // Dump original data to aNode array.

  for(var i=0 ; i<this.aNodesData.length ; i++)...{

  var oneNode=this.aNodesData[i];

  this.aNodes[i]=new Node(oneNode.id,oneNode.pid,oneNode.name,oneNode.url,oneNode.title,oneNode.target,oneNode.icon,oneNode.iconOpen,oneNode.open);

  }

  this.rewriteHTML();

  }

  然后是html,发现一个问题,为什么把html的页面的编码格式转化成gb2312是话,为什么预览无法显示呢?只有在utf-8的情况下才能正常预览,真挺郁闷的...

  <html>

  <head>

  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <link rel="StyleSheet" href="dtree.css" type="text/css" />

  <script type="text/javascript" src="dtree.js"></script>

  </head>

  <body>

  <h2>Example</h2>

  <p>&nbsp;</p>

  <div class="dtree" id="dtree1">

  <script language="javascript">...

  d = new dTree(''d'',"dtree1",''goods'');

  d.add(0,-1,''点击展开权限信息'',"javascript:d.getChildren(-1)");

  d.show();

  </script>

  </div>

  <p>&nbsp;</p>

  </body>

  </html>

  接下来就是Servlet了,没什么好说的。。。

  package com.servlet;

  import java.io.IOException;

  import java.io.PrintWriter;

  import javax.servlet.ServletException;

  import javax.servlet.http.HttpServlet;

  import javax.servlet.http.HttpServletRequest;

  import javax.servlet.http.HttpServletResponse;

  import com.service.*;

  public class TreeServlet extends HttpServlet {

  public void doGet(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {

  doPost(request, response);

  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)

  throws ServletException, IOException {

  Integer pid=null;

  response.setContentType("text/html");

  response.setCharacterEncoding("utf-8");

  PrintWriter p=response.getWriter();

  String id =request.getParameter("parentId");

  if(id.equals("-1")){

  pid=null;

  }else{

  pid=Integer.parseInt(id);

  }

  TreeService treeSer=new TreeService();

  System.out.println(treeSer.getNodesInfo(pid));

  p.print(treeSer.getNodesInfo(pid));

  }

  }

  然后就是业务了...

  public String getNodesInfo(Integer pid)...{

  String condition=null;

  if(pid==null)

  condition=" and parent_id is null";

  else...{

  condition=" and  parent_id="+pid;

  }

  String sql="select permission_id,permission_name,count(permission_id) as c from permission"+

  " where 1=1 "+condition+" group by permission_id,permission_name";

  StringBuffer temp=new StringBuffer();

  try ...{

  getConnection();

  pstmt=con.prepareStatement(sql);

  rs=pstmt.executeQuery();

  while(rs.next())...{

  temp.append(rs.getInt("permission_id")+","+rs.getString("permission_name")+","+rs.getInt("c")+"|");

  }

  System.out.println("the string value is:"+temp);

  } catch (SQLException e) ...{

  e.printStackTrace();

  }finally...{

  try ...{

  rs.close();

  pstmt.close();

  con.close();

  } catch (SQLException e) ...{

  // TODO 自动生成 catch 块

  e.printStackTrace();

  }

  }

  return temp.toString();

  }

  好了,完了,至于源文件的话,需要的朋友可以mail我一下拉,呵呵

  jinhu.tong@hotmail.com

  • 上一篇资讯: 用Ajax读写操作Session()
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 电话:013574892963 QQ:3710167 邮箱:Educs@163.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 Www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号