1. 程式人生 > >純ajax+sqlserver無限級樹形選單.

純ajax+sqlserver無限級樹形選單.

ajax這個當今流行的技術名詞,幾年前ajax開始流行時,也花過點時間研究了一下ajax.net控制元件.只是工作原因,一直沒有用到專案中去.一晃幾年ajax依舊如火如荼.最近閒來無事,重溫ajax.就好象AJAX當初被遺棄,現在又被熱捧一樣.這次我沒有去下載ajax.net,altas等控制元件.而是從ajax基礎看起,呵呵,一種一切從頭開始開始感覺.反正是閒來無事..

       ibm 中國開發區翻譯的<掌握 Ajax 系列>幾篇文章寫的不錯.想了解ajax的基礎朋友可以去看看.

        進入主題吧.做過web開發的朋友,一定都收藏了javascrip樹形選單,我也有.javascript樹形選單和我這次寫的ajax樹形選單最大不同點是ajax樹形選單不是一次性將選單的全部資料提出來.而是當點了節點時才去從資料庫中讀取該節點的子樹資訊,再載入到DIV標籤中,而javascript是一次性將資料全部讀出來.兩者的相同點就是顯示子樹時,都不會重新整理頁面.效果圖如下:

現實步驟:
1、新建表,並在表中新增資料。這裡要注意的是,樹形選單的資料都是從這個表中讀出來,表結構設計要做到無限級。

CREATETABLE[dbo].[SysBaseData](
    
[BaseDataID][int]NOTNULL,
    
[BaseDataCode][char](10NOTNULL,
    
[BaseDataName][varchar](30NOTNULL,
    
[ParentCode][char](10NOTNULL,
    
[Description][varchar](100NULL,
    
[LevelType][int]NOTNULL,
    
[
VaildType][char](1NOTNULL,
    
[PathCode][varchar](100NULL,
    
[SerialNumberID][int]NOTNULL,
 
CONSTRAINT[PK_SysBaseData]PRIMARYKEYNONCLUSTERED 
(
    
[BaseDataID]ASC
)
WITH (PAD_INDEX  =OFF, STATISTICS_NORECOMPUTE  =OFF, IGNORE_DUP_KEY =OFF, ALLOW_ROW_LOCKS  =ON, ALLOW_PAGE_LOCKS  =ONON[PRIMARY]
ON[PRIMARY
]

2、新建樹形選單顯示檔案LeftTreeAjax.html。
       (1)createXMLHttpRequest()建立xnlHttp物件,由於不同的瀏覽器XMLHttpRequest控制元件名不同。程式碼種用了幾個try。這樣幾種主流的瀏覽器都可以相容呢。

//建立物件
function createXMLHttpRequest()
{

    
var isRight =true;
    
try{ xmlHttp =new XMLHttpRequest(); }
    
catch(trymicrosoft)
    
{
        
try{xmlHttp =new ActiveXobject("Msxml2.XMLHTTP");}
        
catch(othermicrosoft)
        
{
            
try{xmlHttp =new ActiveXobject("Microsoft.XMLHTTP");}
            
catch(failed)
            
{
                isRight 
=false;
            }

        }

    }

    
if(!isRight)
      alert(
"XML物件建立失敗");
}

      (2) GetData(ID) 單擊節點時,呼叫該函式。該函式傳送請求給CreateTreeAjax.aspx.

//獲取資料function GetData(ID)
{
    ParID  
= document.getElementById("M1_"+ ID);
    ShowID 
= document.getElementById("M2_"+ ID);
    
if(ShowID.innerHTML !="")
    {
        
if(ShowID.style.display =="none")
            ShowID.style.display 
="block";
        
else
            ShowID.style.display 
="none";
        ShowFolderICO();
        
return;
    }
    
    ShowID.style.display 
="block";
    ShowID.innerHTML 
="<span class="load">Loading Tree ……</span>";
    
var Url ="CreateTreeAjax.aspx?ID="+ ID;
    createXMLHttpRequest();
    xmlHttp.onreadystatechange 
= ShowTree;
    xmlHttp.open(
"GET", Url, true);
    xmlHttp.send(
null);
}

     (3)ShowTree() 顯示子樹,CreateTreeAjax.aspx反回子樹資訊,ShowTree() 獲取資訊,並載入到DIV標籤中.

//此方法直接從伺服器端返回HTMLfunction ShowTree()
{
    
if (xmlHttp.readyState ==4){
        
if (xmlHttp.status ==200)
        {
            ShowID.innerHTML 
= xmlHttp.responseText;
           
// alert(xmlHttp.responseText);            ShowFolderICO();
            
//alert(M1_DCCK.innerHTML);        }else
        {
            ShowID.innerHTML 
="資料獲取錯誤!"+xmlHttp.status;
        }
    }
}

2、新建建立子樹的檔案CreateTreeAjax.aspx,CreateTreeAjax.aspx.cs
CreateTreeAjax.aspx 檔案中只要這一句,其它的都刪除

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="CreateTreeAjax.aspx.cs" Inherits="Manage_BaseData_CreateTreeAjax"%>

CreateTreeAjax.aspx.cs  根據接收到ID,讀取子樹資訊。程式碼太多呢,我就不貼呢。純ajax+sqlserver無限級樹形選單的原始碼需要朋友可以從這裡下載:

補充:第一次釋出時,忘了圖片打包進來.

以下載的朋友可以在這裡下載圖片

http://p.blog.csdn.net/images/p_blog_csdn_net/alphayycn/337547/o_root.gif

依次為:t_L1.gif,t_L2.gif,t_L4.gif,t_M1.gif,t_M2.gif,t_P1.gif,t_P2.gif使用時將圖片名前的t_去掉,放在images目錄就可以.詳細可以看檔案中的css程式碼段.