其中Config对象里面的o var oTopXmlSrc = objXMLDoc.documentElement.selectSingleNode("//TopXMLSrc");在xml是这样的: <TopXMLSrc>Tree.asp?parentcode=00</TopXMLSrc>Tree.asp文件实际是动态输出一个xml文件另外GetXMl里面还有两个方法是:
function fnAllocCall()
{
    var iReturn = null;
    for (var i = 0; i < m_iMaxCalls && m_aoCalls[m_iLastCall] != null; i++)
    {
        m_iLastCall = (m_iLastCall + 1) % m_iMaxCalls;
    }
    
    if (i < m_iMaxCalls)
    {
        iReturn = m_iLastCall;
    }
    return iReturn;
}
上面方法里面的变量定义如如下:
var m_iMaxCalls = 1024;
var m_aoCalls   = new Array();
var m_iLastCall = 0;
var m_iMasterIdx = null;
var m_bSyncFailed = false;
另一个方法:
function CallObject( oXml , oEl , sElClass , oSync )
{
    this.oXml = oXml;
    this.oSync = oSync;
    this.oEl = oEl;
    this.sElClass = sElClass;
}我最不明白的地方是GetXML方法里面
var iCall = fnAllocCall();
    var objXMLDoc = new ActiveXObject("Microsoft.XMLDOM");
    objXMLDoc.async = true;
    m_aoCalls[iCall] = new CallObject( objXMLDoc , oEl , oElClass , oSync );
    
    objXMLDoc.onreadystatechange = Function( "fnLoadComplete( " + iCall + " );" );
    
    objXMLDoc.load( strXMLSrc ); 当var iCall = fnAllocCall();第一调用的时候返回为0的时候,将会生成一个Callobject对象,放在
m_aoCalls[0]里面去,此是的Callobject对象传入的objXMLDoc参数为null值,在执行下面的objXMLDoc.onreadystatechange = Function( "fnLoadComplete( " + iCall + " );" ) 是什么意思
如果执行了fnLoadComplete(0),有什么作用?而objXMLDoc.load( strXMLSrc )只是加载xml文件,好象并不能显示

解决方案 »

  1.   

    最后一个方法:
    function fnLoadComplete( iIndex )
    {
        
        if( iIndex == null ) return;
        var oCall = m_aoCalls[ iIndex ];
        try
        {
            var iReadyState = oCall.oXml.readyState;
        }
        catch(e)
        {
            return;
        }
        
        if(  iReadyState != 4 ) return;
        
        if( oCall != null && oCall.oXml.xml != "" )
        {
            aryXMLNodes = oCall.oXml.documentElement.selectNodes("//TreeRef[@NodeXmlSrc]");
    for (i = 0; i < aryXMLNodes.length; i++)
            {
                var objXMLDoc_Child = new ActiveXObject("Microsoft.XMLDOM");
                objXMLDoc_Child.async = false;
                objXMLDoc_Child.load(strRootPath + aryXMLNodes[i].getAttribute("NodeXmlSrc"));
                if( null != objXMLDoc_Child.documentElement )
                {
                    aryXMLNodes[i].parentNode.replaceChild(objXMLDoc_Child.documentElement, aryXMLNodes[i]);
                }
                objXMLDoc_Child = null;
            }
            
            bFixLoad = oCall.oEl.contains( objLI_Current );
            
            if (objXSLDoc.xml != "")
            {
                var sHtml = oCall.oXml.transformNode( objXSLDoc );
            }         if ( sHtml != null && sHtml != "" )
            {
                oCall.oEl.innerHTML = sHtml;
                oCall.oEl.className = oCall.sElClass;
            }
            else
            {
                oCall.oEl.innerHTML = m_sTempNodeStart + m_sUnavailableText + m_sTempNodeEnd;
            }
            
            if( bFixLoad )
            {
    SelectNode( oCall.oEl.children[0] );
            }
            
            if( iIndex == m_iMasterIdx && m_bSyncFailed == true )
            {
                Sync();
            }
            
            if( oCall.oSync != null )
            {
                SyncAsync( oCall.oSync );
            }
            if( null != objLI_Current && objLI_Current.selectChild ) MoveNext();
            fnDeAllocCall( iIndex );
        }
        else
        {
            oCall.oEl.innerHTML = m_sTempNodeStart + m_sUnavailableText + m_sTempNodeEnd;
        }
        return;}