Avatar billede tblaster Nybegynder
26. august 2003 - 09:19 Der er 5 kommentarer og
1 løsning

Informationer skal hentes fra db og smides i nogle arrays

jeg har følgende javascript kode:

<script language="JavaScript">
var Kunde1 = new Array();
Kunde1[0] = new Entry("1", "TEST ","Her kommer en eller anden information om Test.");
var Modul1 = new Array();
Modul1[0] = new Entry("1_1", "HTML", "HTML modulet er til diverse sider.");
var Temaområde1_1 = new Array();
Temaområde1_1[0] = new Entry("1_1_1","Forside","Information om forsiden.","1");
Temaområde1_1[1] = new Entry("1_1_2","Fagseminar","Her er nogle informationer om fagseminar modulet.","2");

Hvordan får jeg lavet så jeg kan trække informationer ud fra en database og smide det ind i overstående arrays? Altså noget lig følgende:

var Kunde1 = new Array();
Kunde1[0] = new Entry("1", "rs("Navn") ","rs("Information")");

Mine arrays skal ligge i min javascript for ellers virker kode jo ikke.
Avatar billede keysersoze Ekspert
26. august 2003 - 09:33 #1
'do loop
counter = 1
var Kunde1 = new Array();
Kunde1[0] = new Entry('<%=counter%>','<%=rs("navn")%>','<%=rs("Information")%>');
counter = counter + 1
'movenext and loop
Avatar billede tblaster Nybegynder
26. august 2003 - 09:44 #2
Den udskriver det fint som:

var Kunde = new Array();
Kunde[0] = new Entry("1 "," Administrator ","TEST");

Men der bliver ikke vist noget på siden. Her er hele kode hvis det hjælper:
<!-- #INCLUDE FILE="dbOpen.asp" -->
<%
sql= "SELECT * FROM Kunder"
rs.Open Sql, Conn,1

do while not EOF
counter = 1
%>

<script language="JavaScript">
<!--
function Entry(ID, Name, DescriptionText, URL)
{
    this.ID = ID;
    this.Name = Name;
    this.DescriptionText = DescriptionText;
    this.URL = URL;
}

var Kunde = new Array();
Kunde[0] = new Entry("<%=counter%> "," <%=rs("Navn")%> ","TEST");


var Modul1 = new Array();
Modul1[0] = new Entry("1_1", "HTML", "HTML modulet er til diverse sider.");
var Temaområde1_1 = new Array();
Temaområde1_1[0] = new Entry("1_1_1","Forside","Information om forsiden.","winxp-2k_45.23");
Temaområde1_1[1] = new Entry("1_1_2","Fagseminar","Her er nogle informationer om fagseminar modulet.","winnt_43.45");



function InitializeKunde(currentForm) {
    for (var i=0; i < Kunde.length; i++) {
        eval(currentForm + ".Kunde.options[i] = new Option('" + Kunde[i].Name + "')");
        eval(currentForm + ".Kunde.options[i].value = " + Kunde[i].ID);
    }
}

function PopulatePane(currentPane, paneToPopulate) {
    var selectedArray, i;
    var selected = currentPane.options[currentPane.selectedIndex].value
    if (selected == 0) {
        if (currentPane.selectedIndex != 0)
            selected = currentPane.options[--currentPane.selectedIndex].value;
        else {
            currentPane.selectedIndex = -1;
            return false;
        }
    }
           
    selectedArray = eval(paneToPopulate + selected);
    paneToPopulate = eval("currentPane.form." + paneToPopulate)

    for (i = currentPane.form.elements.length - 1; i > 0; i--) {
        paneToClear = paneToPopulate.form.elements[i]
        if (paneToClear == paneToPopulate) {
            break;
        }
        if (paneToClear.name == "Temaområde" || paneToClear.name == "Modul" || paneToClear.name == "Kunde") {
            for (i = paneToClear.options.length; i != 0; i--) {
                paneToClear.options[i - 1] = null;
            }
        }
    }
    while (selectedArray.length < paneToPopulate.options.length) {
        paneToPopulate.options[(paneToPopulate.options.length - 1)] = null;
    }
    for (i = 0; i < selectedArray.length; i++) {
        if ( selectedArray[i] == null || selectedArray[i] == "" ) {
            alert("There is no " + paneToPopulate.Name + " associated with this " + currentPane.Name);
        } else {
            eval("paneToPopulate.options[i] = new Option('" + selectedArray[i].Name + "')");
            eval("paneToPopulate.options[i].value = '" + selectedArray[i].ID + "'");
        }
    }
    if (document.welcome.Temaområde.options[0] == null) {
        document.welcome.Temaområde.options[0] = new Option("[Step 3]                            ");
        document.welcome.Temaområde.options[0].value = 0;
    }
}

function changePage(form) {

    if (form.Temaområde.selectedIndex != -1) {
        PaneValues = form.Temaområde.options[form.Temaområde.selectedIndex].value.split("_");
        ModulValue = PaneValues[0] + "_" + PaneValues[1]
        DriverValue = ModulValue + "_" + PaneValues[2];
        whichArray = eval("Temaområde" + PaneValues[0] + "_" + PaneValues[1]);
        for (i = 0; i < whichArray.length; i++) {
            if (whichArray[i].ID == DriverValue) {
                form.action = "java script:document.location.href = '" + strURLPrefix + whichArray[i].URL + "';";
                break;
            }
        }
        return true;
    } else {
        alert("Vælg venligst et temaområde før du fortsætter.");
        return false;
    }
}

function changeTextBlock(whichPane) {
    if (whichPane.selectedIndex == -1)
        return false;
   
    var newDescription;
    switch (whichPane.name) {
        case "Kunde" :
            newDescription = Kunde[whichPane.selectedIndex].DescriptionText;
            break;
        case "Modul" :
            newDescription = eval("Modul" + whichPane.form.Kunde.options[whichPane.form.Kunde.selectedIndex].value + "[" + whichPane.selectedIndex + "].DescriptionText");
            break;
        case "Temaområde" :
            newDescription = eval("Temaområde" + whichPane.form.Modul.options[whichPane.form.Modul.selectedIndex].value + "[" + whichPane.selectedIndex + "].DescriptionText");
            break;
    }
    if (NS4) {
        eval(layerRef + '["description"].document.open()');
        eval(layerRef + '["description"].document.write(newDescription)');       
        eval(layerRef + '["description"].document.close()');       
    } else if (NS6) {
        eval(layerRef + '("description").innerHTML=newDescription');
    } else {
        eval(layerRef + '["description"].innerHTML=newDescription');
    }
}

var bName = navigator.appName;
var bVer = parseInt(navigator.appVersion);
var NS4 = (bName == "Netscape" && bVer == 4);
var NS6 = (navigator.vendor == "Netscape6");
var IE4 = (bName == "Microsoft Internet Explorer" && bVer >= 4);
var Opera = (window.opera)

if (NS4) {
    layerRef="document.layers";
    styleSwitch="";
} else if (IE4) {
    layerRef="document.all";
    styleSwitch=".style";
} else if (NS6 || Opera) {
    layerRef="document.getElementById";
    styleSwitch=".style";
}
// -->
</script>
</head>

<%
counter = counter + 1
rs.movenext
Loop
%>
<!-- #INCLUDE FILE="dbClose.asp" -->

<body onLoad="InitializeKunde('document.welcome');">



</td>
<td valign="top">

<div style="margin-left: 20px;">
<!-- intro content -->
<table cellpadding="0" cellspacing="10" width="580" border="0">
    <tr>
        <td class="text" valign="top" width="490Welkommen </td></tr>
</table>
</div>



<div style="margin-left: 20px; margin-top: 10px;">
<form onSubmit="return changePage(this);" name="welcome" method="get" enctype="text/plain">
    Vælg en kunde:
    <div style="font-family: arial; font-size: 11px; margin-bottom: 3px;">
        <select name="Kunde"
                size="8"
                onChange="PopulatePane(this, 'Modul'); changeTextBlock(this);"
                style="font-family: arial; font-size: 11px">
            <option value="0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
        </select>
        <select name="Modul"
                size="8"
                onChange="PopulatePane(this, 'Temaområde'); changeTextBlock(this);"
                style="font-family: arial; font-size: 11px">
            <option value="0">[Step 2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
        </select>
        <select name="Temaområde"
                size="8"
                style="font-family: arial; font-size: 11px;"
                onChange="if (this.form.Temaområde.options[this.form.Temaområde.selectedIndex].value == 0) { this.form.Temaområde.selectedIndex -= 1 }; changeTextBlock(this);">
            <option value="0">[Step 3]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>
        </select>
    </div>
    <INPUT NAME="Submit" TYPE="submit" VALUE="Go!">
</FORM>

<DIV id="description"></DIV>

<script language="JavaScript" type="text/javascript">
<!--
document.welcome.Kunde.selectedIndex = -1;
document.welcome.Modul.selectedIndex = -1;
document.welcome.Temaområde.selectedIndex = -1;

//-->
</script>

</body>
</html>


Hvis du erstatter Kunde[0] i overstående med følngede:
Kunde[0] = new Entry("1"," Test ","TEST");
Og sætter ' foran følgende:
'do while not EOF
'rs.movenext
'Loop
Så kan du se at koden virker fint. Hvorfor gør den det så ikke når den henter fra databasen?
Avatar billede tblaster Nybegynder
26. august 2003 - 09:48 #3
Hvis jeg flytter det op så det kun står om Kunde[0] altså:

<!-- #INCLUDE FILE="dbOpen.asp" -->
<%
sql= "SELECT * FROM Kunder"
rs.Open Sql, Conn,1

do until EOF
counter = 1
%>


var Kunde = new Array();
Kunde[0] = new Entry("<%=counter%> "," <%=rs("Navn")%> ","TEST");


<%
counter = counter + 1
rs.movenext
Loop
%>
<!-- #INCLUDE FILE="dbClose.asp" -->

Så får jeg kun udskrevet følgende på min side hvis jeg ser sidens kode:


<script language="JavaScript">



var Kunde = new Array();
Kunde[0] = new Entry("1 "," Administrator ","TEST");





var Kunde = new Array();
Kunde[0] = new Entry("1 "," Sge ","TEST");





var Kunde = new Array();
Kunde[0] = new Entry("1 "," Just2funny ","TEST");





var Kunde = new Array();
Kunde[0] = new Entry("1 ","  <font face="Arial" size=2>
<p>ADODB.Field</font> <font face="Arial" size=2>error '80020009'</font>
<p>
<font face="Arial" size=2>Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.</font>
<p>
<font face="Arial" size=2>/cifm/system.asp</font><font face="Arial" size=2>, line 0</font>
Avatar billede keysersoze Ekspert
26. august 2003 - 09:54 #4
du mangler at køre en if rs.eof - det er det følgende betyder; Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record
Avatar billede tblaster Nybegynder
26. august 2003 - 09:58 #5
Det virkede at ændre lidt i min EOF. Nu har jeg følgende:



<script language="JavaScript">
<!--
function Entry(ID, Name, DescriptionText, URL)
{
    this.ID = ID;
    this.Name = Name;
    this.DescriptionText = DescriptionText;
    this.URL = URL;
}

var Kunde = new Array();

<!-- #INCLUDE FILE="dbOpen.asp" -->
<%
sql= "SELECT * FROM Kunder"
rs.Open Sql, Conn,1

Do While Not rs.EOF
%>
Kunde[<%=rs("KundeID")%>] = new Entry("<%=rs("KundeID")%> "," <%=rs("Navn")%> ","TEST");
<%
rs.movenext
loop
%>
<!-- #INCLUDE FILE="dbClose.asp" -->

Nu udskriver den informationerner fra databasen som den skal men den udskriver ikke den første del af min kode:
<script language="JavaScript">
<!--
function Entry(ID, Name, DescriptionText, URL)
{
    this.ID = ID;
    this.Name = Name;
    this.DescriptionText = DescriptionText;
    this.URL = URL;
}
var Kunde = new Array();

Hvad kan jeg gøre for at få den til den?
Jeg syntes ikke at det hjalp at smide det i en <% %> med en response.write men det er måske mig der koder forkert. Hvad kan jeg gøre?
Avatar billede tblaster Nybegynder
26. august 2003 - 10:19 #6
Jeg fik det til at virke ... tak for hjælpen!
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