Avatar billede kustoden Nybegynder
11. juli 2003 - 14:34 Der er 1 løsning

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> &nbsp </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> &nbsp </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



%>
Avatar billede kustoden Nybegynder
15. juli 2003 - 12:46 #1
Never mind. Jeg har konstateret, at det ikke kan lade sig gøre på den måde, jeg ville have gjort det. Ovenstående algoritme er forkert.

Jeg har klaret den ved at skrive et dll, der kører serverside som extension til webserveren. Der er jeg også mere på hjemmebane.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester