Rekursion i ASP Javascript serverside
Hej.Jeg sidder med en lille sjov ting. Jeg skal have bygget en træstruktur.
Til dette benytter jeg en funktion, som bl.a. tager nummeret på en topnoden som parameter, og senere kalder sig selv med de noder, der ligger under.
Den returnerer en boolean og den er altid false, også selv om jeg kan se, at den bliver sat true i det ene gennemløb.
Jeg får så den mistanke, at der ikke bliver allokeret plads til nye variable ved rekursion, så variablene derved overskrives, når man kommer tilbage fra et rekursivt kald.
(Mao. der er kun een instans af variablen uanset antallet af rekursive kald)
Er der nogen, der kan hjælpe?
<%
var
intCnt, arrNode, i
function WriteTree(intTop, intLevel, blnParentSelected, strSenderName)
{
var
objRS,
blnSel,
tmpPar,
tmpTextNo,
tmpTextText,
tmpRes;
tmpRes = false;
blnSel = false;
intCnt = 0;
objConn = Session("objConn");
if (blnParentSelected)
Response.write('<SCRIPT> alert("Top ' + intTop + ' Level ' + intLevel + '") </SCRIPT>');
strSQL = "SELECT TextNo, TextText, Class, Link, Parent FROM VW_Text WHERE PageName LIKE 'Left.asp' AND LangID =" +
Session("LangID") + " AND Parent = " + intTop;
objRS = objConn.Execute(strSQL);
while (!objRS.EOF)
{
blnSel = (Session("CurSel") == objRS("TextNo"));
tmpRes = blnSel;
Response.write('<SCRIPT> alert("' + 'tmpRes = ' + tmpRes + '") </SCRIPT>');
strLink = (objRS("Link") == 'default' ? '' : objRS("Link"));
if (blnSel)
{
Response.write('<tr>');
for (i = 1; i < intLevel; i++)
Response.write('<td>   </td>');
Response.write('<td class="SelectedTreeItem"> <a href="' +
(strLink == '' ? strSenderName + '?par=' + objRS("TextNo") + '&Sel=' + objRS("TextNo") + '"' :
strLink ) + '>' + objRS("TextText") + '</a>' + '</td></tr>');
WriteTree(objRS("TextNo"), intLevel + 1, true);
Response.write('<SCRIPT> alert("' + 'Going to nest' + '") </SCRIPT>');
tmpRes = true;
}
else
{
tmpPar = objRS("Parent");
tmpTextNo = objRS("TextNo");
tmpTextText = objRS("TextText");
tmpRes = WriteTree(objRS("TextNo"), intLevel + 1, false);
Response.write('<SCRIPT> alert("' + 'returned = ' + tmpRes + '") </SCRIPT>');
if ((tmpRes) || (tmpPar == "0"))
{
strClass = (objRS('Class') == 'default' ? 'LeftText_White' : objRS("Class"));
Response.write('<tr>');
for (i = 0; i < intLevel; i++);
Response.write('<td>   </td>');
Response.write('<td class="SelectedTreeItem"> <a ' + (blnSel ? '' : ' class="' + strClass) + '" href="' +
(strLink == '' ? strSenderName + '?par=' + tmpTextNo + '&Sel=' + tmpTextNo + '"' :
strLink ) + '>' + tmpTextText + '</a>' + '</td></tr>');
}
}
objRS.MoveNext();
}
objRS.Close();
objRS = null;
Response.write('<SCRIPT> alert("' + 'returning ' + tmpRes + '") </SCRIPT>');
return(tmpRes);
}// func WriteTree
%>