其中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文件,好象并不能显示
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文件,好象并不能显示
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;}