Avatar billede mitbrugernavn Praktikant
13. oktober 2008 - 15:26 Der er 22 kommentarer og
1 løsning

JScript - funktioner

Plejer at bruge VB men er kommet ud i noget JScript sammen med Asp

Lidt grundlæggende hjælp ønskes - har følgende script - som jeg så skal have udskrevet via en function eller hva ??  og hvordan

function NyhedID()
{
    var NyhedID = new Array();
    var strSQL = "SELECT * FROM Nyheder";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    while ( ! objRS.EOF )
    {
        objNyhedID[ objNyhedID.length ] = new id( "" + objRS( "id" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return objNyhedID;
}

fra denne funktion skal jeg så videre til en anden funktion som deler array og henter tekster for hvert id - f.eks.

function NyhedText()
{
    var NyhedText = new Array();
    var strSQL = "SELECT * FROM Nyheder where id = +det id der er i array";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    while ( ! objRS.EOF )
    {
        objNyhedText[ objNyhedText.length ] = new Text( "" + objRS( "id" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return objNyhedID;
}

og herefter så til en funktion der kan udskrive dette

hvordan gør jeg det ?????
evt. lidt forklaring til hvem - hvad - hvorfor og hvem gør hvad hvornår ;-))))
Avatar billede roenving Novice
13. oktober 2008 - 17:02 #1
Hvorfor skal du have id og text i to omgange, hvorfor henter du dem ikke på een gang:

function NyhedID()
{
    var objNyhedID = [];//array
    var strSQL = "SELECT id, text FROM Nyheder";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    while ( ! objRS.EOF )
    {
        objNyhedID[ objNyhedID.length ] = [objRS("id"),objRS("text")];
        objRS.MoveNext();
    }
    CloseConnection();
    return objNyhedID;
}
Avatar billede mitbrugernavn Praktikant
13. oktober 2008 - 17:07 #2
ups er kommet til at lave en tekst fejl id ligger i en db og tekst i en anden - har rettet lidt til her i forhold til mit oprindelige spørgsmål

function NyhedID()
{
    var NyhedID = new Array();
    var strSQL = "SELECT * FROM Nyheder";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    while ( ! objRS.EOF )
    {
        objNyhedID[ objNyhedID.length ] = new id( "" + objRS( "id" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return objNyhedID;
}

fra denne funktion skal jeg så videre til en anden funktion som deler array og henter tekster for hvert id - f.eks.

function NyhedText()
{
    var NyhedText = new Array();
    var strSQL = "SELECT * FROM NyhederTekst where id = +det id der er i array";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    while ( ! objRS.EOF )
    {
        objNyhedText[ objNyhedText.length ] = new Text( "" + objRS( "Text" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return NyhedText;
}
Avatar billede mitbrugernavn Praktikant
13. oktober 2008 - 17:07 #3
og det hele ligger selvfølgelig i samme db - men i hver sin tabel ;-)))
Avatar billede roenving Novice
13. oktober 2008 - 17:30 #4
Hrm, så skal du lige have fat i sql-hajerne, for du skal lave noget i denne stil (jeg er _ikke_ sql-haj !-)

SELECT id FROM NyhederID, text FROM Nyheder INNERJOIN id = id
Avatar billede mitbrugernavn Praktikant
13. oktober 2008 - 18:00 #5
nej nej - sql det kan jeg selv - problemet er hvordan jeg får hentet f.eks.
array fra function NyhedID() ned til function NyhedText - d.v.s. den skal jo splittes inden for at jeg kan få fat i hver enkelt - og hvordan udskriver jeg det så ????

dette er bare et eksempel - men skal bruge det til noget andet - her ved jeg godt at jeg kan bruge innerjoin.

Men jeg vil gerne have et eksempel på hvordan man bruger et array dannet i 1 function - som sendes videre til en 2 function - hvor efter det så udskrives.
Avatar billede olebole Juniormester
13. oktober 2008 - 19:24 #6
<ole>

For det første skal du navngive din variabel korrekt - som roenving viser dig det. Ikke:
    var NyhedID = new Array();

- men:
    var objNyhedID = new Array();

- ellers giver indholdet af funktionerne ikke mening  =)

Derudover er det ikke særligt effektivt at skulle hente array'ets length i hvert gennemløb af løkken. Dette er en del mere effektivt:

function NyhedID()
{
    var NyhedID = new Array();
    var strSQL = "SELECT * FROM Nyheder";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedID[i++] = new id( "" + objRS( "id" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return objNyhedID;
}

- og:

function NyhedText()
{
    var NyhedText = new Array();
    var strSQL = "SELECT * FROM NyhederTekst where id = +det id der er i array";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedText[i++] = new Text( "" + objRS( "Text" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return NyhedText;
}

Hvad du vil med de to funktioner må du til gengæld forklare langt mere udførligt  =)

/mvh
</bole>
Avatar billede olebole Juniormester
13. oktober 2008 - 19:26 #7
Damned copy/paste! Sådan:

function NyhedID()
{
    var objNyhedID = new Array();
    var strSQL = "SELECT * FROM Nyheder";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedID[i++] = new id( "" + objRS( "id" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return objNyhedID;
}

- og:

function NyhedText()
{
    var objNyhedText = new Array();
    var strSQL = "SELECT * FROM NyhederTekst where id = +det id der er i array";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedText[i++] = new Text( "" + objRS( "Text" ))
        objRS.MoveNext();
    }
    CloseConnection();
    return objNyhedText;
}
Avatar billede mitbrugernavn Praktikant
13. oktober 2008 - 19:33 #8
super så langt så godt - men hvordan skriver jeg så objNyhedID ud - og for hvert id den henter hvordan henter jeg så med det i function NyhedText ???????

det jeg vil er at danne et array med alle nyheds id - derefter gennemløbe dette array og hente i nyhedertekst i forhold til det enkelt id - og derefter igen så udskrive ????

har ingen problember hvis jeg sad i vb - men er lidt på halen i jscript - bruges sammen med asp. Vil gerne have lidt styr på statement, object og method - hvordan jeg bruger dem i forhold til hinanden.
Avatar billede olebole Juniormester
14. oktober 2008 - 00:51 #9
Jeg er ret sikker på, din kommentar til roenving "nej nej - sql det kan jeg selv" ikke er hel korrekt. Det, roenving forsøgte at vise dig, var, at du kan nøjes med én funktion og ét SQL-kald, som henter både id og tekst fra begge tabeller i ét hug  =)

Anyway, så får du den nu med to funktioner. Hvad du ikke er vandt til fra VB er, at man kan smide arrays og objekter rundt mellem funktioner. Dels kan en funktion modtage et array og/eller et objekt som parameter - og dels kan den returnere ditto.

Prøv noget à la:

<script type="text/javascript">
function NyhedID()
{
    var objNyhedID = new Array();
    var strSQL = "SELECT * FROM Nyheder";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedID[i++] = objRS( "id" )
        objRS.MoveNext();
    }
    CloseConnection();
    objConn = objRS = null;
    return objNyhedID;
}

function NyhedText(id)
{
    var strSQL = "SELECT * FROM NyhederTekst where id = " + id;
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var objTmp = null;
    var objBody = document.getElementsByTagName("body")[0];
    var i = 0;
    while ( ! objRS.EOF )
    {
        objTmp = document.createElement("div");
        objTxt = document.createTextNode( objRS("Text") );
        objTmp.appendChild(objTxt);
        objBody.appendChild(objTmp);
        objRS.MoveNext();
    }
    CloseConnection();
    objConn = objRS = null;
}

var aNyhedsID = NyhedID();
for (var i=0,j=aNyhedsID.length; i<j; i++) {
    NyhedText( aNyhedsID[i] );
}
</script>
Avatar billede olebole Juniormester
14. oktober 2008 - 00:53 #10
- ganske utestet  =)
Avatar billede mitbrugernavn Praktikant
14. oktober 2008 - 15:05 #11
har kortet lidt ned for at kunne overskue det

function NyhedID()
{
    var objNyhedID = new Array();
    var strSQL = "SELECT * FROM News";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedID[i++] = objRS( "tekst" )
        objRS.MoveNext();
    }
    CloseConnection();
    objConn = objRS = null;
    return objNyhedID;
}
var aNyhedsID = NyhedID();
for (var i=0; i<aNyhedsID.length; i++ )
{
response.write (aNyhedsID[i])
}

nu kommer den med Objektet er ikke længere gyldigt.
linie 52 og det er linien -response.write (aNyhedsID[i])
Avatar billede olebole Juniormester
14. oktober 2008 - 15:25 #12
- sker det også uden linjen:
    objConn = objRS = null;
Avatar billede mitbrugernavn Praktikant
14. oktober 2008 - 15:34 #13
når jeg kører den således - returnere den tallet 5 og det er også korrekt

function NyhedID()
{
    var objNyhedID = new Array();
    var strSQL = "SELECT * FROM News";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedID[i++] = objRS( "tekst" )+","

        objRS.MoveNext();
    }
    CloseConnection();
    objConn = objRS = null;
    return objNyhedID;
}
var aNyhedsID = NyhedID();
response.write (aNyhedsID.length)

så den henter posterne - ihvertfald antal - sætter jeg så

for (var i=0; i<aNyhedsID.length; i++ )
response.write (i)

skriver den 01234
Avatar billede mitbrugernavn Praktikant
14. oktober 2008 - 15:47 #14
ahhhhh - nu fik jeg den til at skrive teksten ud

var aNyhedsID = NyhedID();
for (var i=0; i<aNyhedsID.length; i++ )
response.write ("<br>"+aNyhedsID[i])
så langt så godt - hvis man så vender den og får den til at hente id  og derefter hente teksten i en ny function (det er bare et eks. det ville man jo gøre i samme)

hva så
Avatar billede mitbrugernavn Praktikant
14. oktober 2008 - 16:55 #15
lidt sjovt - nu virker det næsten - den udskriver alle id - men skriver kun den sidste id tekst ud (det er nok ikke særlig korrekt det jeg har lavet - men det virker da lidt ;-))

function NyhedID()
{
    var objNyhedID = new Array();
    var strSQL = "SELECT * FROM News";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
        objNyhedID[i++] = "" + objRS( "Id" )
        objRS.MoveNext();
    }
    CloseConnection();
    objConn = objRS = null;
    return objNyhedID;
}
var aNyhedsID = NyhedID();
for (var i=0; i<aNyhedsID.length; i++ )
response.write ("<br>"+aNyhedsID[i])


function NyhedText(id)
{
    var objNyhedTekst = new Array();
    var aNyhedsID = NyhedID();

    for (var i=0; i<aNyhedsID.length; i++ )

    var nID = aNyhedsID[i]
    var strSQL = "SELECT * FROM News where id = " + nID;
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
      objNyhedTekst[i++] = "" + objRS( "tekst" )
      objRS.MoveNext();
    }

    CloseConnection();
    objConn = objRS = null;
return objNyhedTekst;
}
var aNyhedText = NyhedText();
for (var i=0; i<NyhedText.length; i++ )
response.write ("<br>"+aNyhedText[i])
Avatar billede mitbrugernavn Praktikant
14. oktober 2008 - 18:43 #16
har stadig ikke fået den til at udskrive ???

men har lige et tillægssp.

denne:

function CNyhedID( nID, strTitle )
{
    this.nID        = nID;
    this.strTitle    = strTekst;
   
}

function NyhedID()
{
    var objNyhedID = new Array();
    var strSQL = "SELECT * FROM News";
    var objConn = GetConnection();
    var objRS    = objConn.execute( strSQL );
    var i = 0;
    while ( ! objRS.EOF )
    {
      objNyhedID[i++]  =  new CNyhedID("" + objRS( "Id" ) +","+objRS( "Tekst" ));
       
        objRS.MoveNext();
    }
    CloseConnection();
    objConn = objRS = null;
    return objNyhedID;
}
var aNyhedsID = NyhedID();
for (var i=0; i<aNyhedsID.length; i++ )
response.write ("<br>"+aNyhedsID[i])

returnere så kun
[object Object]
[object Object]
[object Object]
[object Object]
[object Object]

hvad gør new CNyhedID - før array og function ved samme navn og hvordan får jeg det så ud
Avatar billede olebole Juniormester
14. oktober 2008 - 23:20 #17
Dit array indeholder jo de objekter, du selv har lagt i det - så det ville undre, om du fik et andet resultat  =)

Sådan skal du skrive det ud:
    response.write ("<br>"+aNyhedsID[i].strText)
Avatar billede mitbrugernavn Praktikant
28. oktober 2008 - 07:27 #18
vil du lægge et svar olebole - så er der point til dig.
Avatar billede olebole Juniormester
28. oktober 2008 - 09:17 #19
- comming right up  ;o)
Avatar billede mitbrugernavn Praktikant
28. oktober 2008 - 09:29 #20
hej olebole

kan jeg komme med et lille tillægsspørgsmål ??
Avatar billede olebole Juniormester
28. oktober 2008 - 10:03 #21
Det har jeg ikke kinamands chance for at vide. Du kan jo prøve ... så må vi se, om det lykkes. Jeg er i hvertfald frisk på et svar  =)

- og tak for points  ;o)
Avatar billede mitbrugernavn Praktikant
28. oktober 2008 - 10:07 #22
;-)) har lige oprettet spørgsmålet

http://www.eksperten.dk/spm/850663
Avatar billede olebole Juniormester
28. oktober 2008 - 14:33 #23
Du havde nu ikke behøvet at oprette en nyt spm. Jeg var såmænd klar til at svare her  =)
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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