用AJAX实现从数据库读取数据实现TreeView(三)

3、请求数据RequestData:
此部分根据TreeView中节点的节点事件来读取服务器上的分类信息。
var  FIRST_NODE     =   " firstNode " ;
var  SECOND_NODE     =   " secondNode " ;
var  NODE_ID         =   " id " ;
var  NODE_NAME     =   " name " ;
var  NODE_HAS_CHILDS     =   " hasChilds " ;
var  NODE_LEVEL     =   " Levels " ;
var  NODE_URL     =   " Url " ;

/*
TreeView显示图标
*/

var  objIcons  =   new  Array(
    
" image/L4.gif " ,
    
" image/L1.gif " ,
    
" image/L2.gif " ,
    
" image/P0.gif " ,
    
" image/P1.gif " ,
    
" image/P2.gif " ,
    
" image/M0.gif " ,
    
" image/M1.gif " ,
    
" image/M2.gif " ,
    
" image/folderopen.gif " ,
    
" image/folder.gif " ,
    
" image/file.gif " ,
    
" image/L5.gif " ,
    
" image/P3.gif " ,
    
" image/M3.gif "
);

/*
    创建树的父容器
*/

function  CreateParentContainer()
{
    
var parentNode = document.createElement( "div" );    
    parentNode.setAttribute( 
"className","zhTreeView" );
    document.body.appendChild( parentNode );
    
return parentNode;
}


/*
请求数据脚本
host:        对于图标而言,其主目录地址
url:        请求的地址
postfix:    后缀名称,?name中的name
id:            ?name=id中的id
parentNode:    树的父节点
channelName:通道名称
targetFrame:链接目标框架名称
colorMouseOver:OnMouseOver时的背景颜色
*/

function  RequestHandler( host,url,postfix,id,parentNode,channelName,targetFrame,colorMouseOver )
{
    
this.host = host;
    
this.strUrlText = url;
    
this.strPostfix = postfix;
    
this.strID = id;
    
this.parentNode = parentNode;
    
this.channelName = channelName;
    
this.targetFrame = targetFrame;
    
this.colorMouseOver = colorMouseOver;
    
    
/*
        请求数据
    
*/

    
this.RequestData = function()
    
{
        
var goUrl = this.strUrlText + '?' + this.strPostfix + '=' + this.strID + '';
        Request.send( goUrl ,
this.RequestDataCallback,this.channelName,true,this );
    }


    
/*
        异步请求结束
        obj:    请求数据返回的XML对象
        handler:当前对象
    
*/

    
this.RequestDataCallback = function( obj,handler )
    
{    
        
//创建树    
        window.tree = new TreeView( handler,objIcons,handler.targetFrame,handler.colorMouseOver );
        
var bHasParent = true;    //是否有父节点
        //检查父容器是否为空,如果为空,则创建        
        if( handler.parentNode == null | handler.parentNode == undefined )
        
{
            handler.parentNode 
= CreateParentContainer();
            bHasParent 
= false;
        }

        
else
        
{
            
//清除子节点
           var nodes = handler.parentNode.childNodes;
           
if( nodes != null && nodes != undefined )
           
{
                
var len = nodes.length;           
                
forvar i = len - 1; i > 0; i-- )
                
{
                        handler.parentNode.removeChild( nodes[i] );        
                }

           }

        }

        
//读取接收到的数据
        var xmlobj = obj.responseXML;
        
var firstNodes = xmlobj.getElementsByTagName( FIRST_NODE );
        
var tmpNode = null;
        
var tmpChildNodes = 0;
        
//读取一级分类
        forvar i = 0; i < firstNodes.length; ++i )
        
{
            tmpChildNodes 
= 0;
            tmpNode 
= CreateNode( firstNodes[i],tree,i,firstNodes.length,bHasParent,handler.parentNode );
            
//读取二级分类
            tmpChildNodes = firstNodes[i].childNodes.length;
            
if( tmpChildNodes )
            
{            
                
forvar j = 0; j < tmpChildNodes; ++j )
                
{
                    tmpNode.appendChild( CreateNode( firstNodes[i].childNodes[j],tree,j,tmpChildNodes,
true,tmpNode) );
                }

            }

            
//添加到父容器中
            handler.parentNode.appendChild( tmpNode );
        }

        ExpandNextNodes( handler.parentNode );
    }
    
}
     // end RequestHandler

/*
    根据XML节点创建树节点
    objXmlObject:    xml节点
    treeObject:        TreeView对象
    index:            当前节点索引
    nodesLength:    当前级别节点总数
    bHasParent:        是否有父节点
*/

function  CreateNode( objXmlNode,treeObject,index,nodesLength,bHasParent,parentNode )
{
    
var tmpUrl = '';
    
var tmpID = '';
    
var tmpName = '';
    
var tmpHasChilds = false;
    
var tmpLevels = 1;
    
var nLocation = 1;
    tmpUrl 
= objXmlNode.getAttribute( NODE_URL );
    tmpID 
= objXmlNode.getAttribute( NODE_ID );
    tmpName 
= objXmlNode.getAttribute( NODE_NAME );
    tmpHasChilds 
= objXmlNode.getAttribute( NODE_HAS_CHILDS );
    tmpHasChilds 
= ( tmpHasChilds == "true" ? true : false );
    tmpLevels 
= objXmlNode.getAttribute( NODE_LEVEL );
    index 
+= 1;
    
switch( index )
    
{
        
case 1:
            nLocation 
= 1;
            
break;
        
case nodesLength:
            nLocation 
= 3;
            
break;
        
default:
            nLocation 
= 2;
            
break
    }

    
//如果此节点有子节点,则显示
    var display = objXmlNode.childNodes.length > 0 ? "" : "NONE";
    
return treeObject.AppendNode( tmpName,tmpUrl,tmpID,display,tmpHasChilds,tmpLevels,nLocation,bHasParent,index < nodesLength, parentNode  );
}

 调用方法:
    setTreeStyle();
    
var  tmp  =   new  RequestHandler(  '' , ' RequestXmlData.aspx ' , ' ID ' , '' , null , ' Channel ' , ' _blank ' , ' #eeeeee '  ); 
    tmp.RequestData();
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值