Max: Variablenübergabe in ein Javascript

Hallo Leute!

Ich suche nun bereits seit langer Zeit und habe zum folgenden Problem nichts gefunden, oder einfach nur das ganze nicht richtig verstanden.

Ich schildere mal, das was ich gerne hätte:

Es werden Daten aus einer *.MDB gelesen, diese wiederum in eine Variable.

Danach folgt ein JavaScript, welches einen "News-Ticker" auf der HP anzeigt, bzw. anzeigen soll, mit genau diesen Werten der Variablen.

D.h.

Extern, also Serverseitig lese ich die Daten über ASP aus, was ja an und für sich kein Problem ist.

Jedoch Clientseitig möchte ich diese ausgelesenen Daten an das Script übergeben, damit es natürlich auch funktioniert.

Es gibt, bzw. gab, einen <script language="JavaScript" runat="server">, da dies beide Scripts am Server ermöglichen soll.

Funktioniert halt nicht wirklich.

Es geht mir nicht um irgendeine Syntax, es geht mir ums Verständnis: GEHT DAS, oder GEHT DAS NICHT!

Wenn JA, wäre ich um eine Hilfe sehr dankbar!

Gruß

Max

  1. hi,

    Es geht mir nicht um irgendeine Syntax, es geht mir ums Verständnis: GEHT DAS, oder GEHT DAS NICHT!

    Freilich geht das mit AJAX

    MfG

    1. Hallo Leute!

      Vielen Dank für eure zahlreichen Antworten.

      Bisher programmiere ich ausschliesslich in VBScript und habe eben mit Javascript keine Berührung gehabt bisher.

      Ich habe ein kleines Script gefunden, anhand dessen ich euch vielleicht das Ganze näher beschreiben kann:

      Dies ist ein Ticker, der sich selbst aktualisiert, funktioniert auch gut.

      <script language="JavaScript">  
      <!--  
      var max=0;  
      function textlist()  
      {  
              max=textlist.arguments.length;  
              for (i=0; i<max; i++)  
                      this[i]=textlist.arguments[i];  
      }  
      <%  
        
      var t1 = "Dies ist ein Text"  
      %>  
      tl=new textlist  
      (  
      " Vorwort: Willkommen auf js.Welt.de.",  
      " Durchsuchen Sie diese Website",  
      " FAQ zu allen möglichen Sachen!",  
      " Ich hoffe es gefählt ihnen hier !");  
        
      var x=0; pos=0;  
      var l=tl[0].length;  
        
      function textticker()  
      {  
      document.form1.textfeld.value=tl[x].substring(0,pos)+"_";  
        
              if(pos++==l)  
              {  
                      pos=0;  
                      setTimeout("textticker()",5000);  
                      x++;  
                      if(x==max)  
                              x=0;  
                      l=tl[x].length;  
              } else  
                      setTimeout("textticker()",50);  
      }  
      // -->  
      </script>
      

      Wie ihr sehen könnt, werden 4 Zeilen an das Script übergeben

      " Vorwort: Willkommen auf js.Welt.de.",
      " Durchsuchen Sie diese Website",
      " FAQ zu allen möglichen Sachen!",
      " Ich hoffe es gefählt ihnen hier !");

      und genau diese Zeilen möchte ich natürlich nicht hardcoded im Script haben, sondern aus einer Datenbank auslesen und in Variablen schmeissen und dann in diesem Script verwenden. Die Datenbank wird ausserhalb des Scripts ausgelesen, also oberhalb und dann gibt es halt 4 Variablen die durch das Script angezeigt werden sollen.

      Ich hoffe, ich habe mich nun etwas verständlicher ausgedrückt.

      Gruß

      Max

      1. Mahlzeit,

        und genau diese Zeilen möchte ich natürlich nicht hardcoded im Script haben, sondern aus einer Datenbank auslesen und in Variablen schmeissen und dann in diesem Script verwenden.

        Dann würde ich den text in einer eigenen Javascript-Datei erzeugen. Du kannst ja mit VB-Script das Javascript erzeugen (natürlich den passenden Content-Type senden).

        Wenn du dann dein Script und die erzeugte Datei in dein HTML einbindest, kann das Script auf den Text zugreifen.
        Ich hoffe es war halbwegs verständlich, was ich meine ;)

        --
        42
      2. Hallo Max

        Bisher programmiere ich ausschliesslich in VBScript…

        also kannst du einen String (letztlich ist ein JavaScript [] für VBScript nichts anderes) erzeugen und den als Datei speichern, bzw. in deine Seite einbinden oder ihn mittles AJAX vom Server holen.
        ZB: ~~~javascript <script>tl=new textlist(
          'Willkommen auf meiner Hompage!',
          'FAQ zu allen möglichen Sachen!',
          'Durchsuchen Sie diese Website!',
          'Ich hoffe es gefällt Ihnen hier!'
        )</script>

          
        Wenn sich die News nicht minütlich aktualisieren und nur auf der Startseite verwendet werden, können sie ja schon in die (ASP/HTML)-Datei, wie in meinem Beispiel, geschrieben sein. Dann brauchst du sie nicht in eine extra Datei speichern.  
          
        Ohne zu wissen wie deine Seite organisiert ist, wie du die Daten aus deiner db verarbeitest, was deine Function zurückgibt, sehe ich nur eine Fülle von Wegen die zum Ziel führen, habe aber keinen echten Ansatzpunkt. Wie gesagt letztlich verwurschtelst du nur einen String zu einem JavaScript Array.  
          
        
        > Ich habe ein kleines Script gefunden, anhand dessen ich euch vielleicht das Ganze näher beschreiben kann:  
        > Dies ist ein Ticker, der sich selbst aktualisiert, funktioniert auch gut.  
          
        Also ich habs nicht zum Laufen gebracht.  
        Selbst als ich diesen Schnipsel entfernt habe:  
        ~~~php
        <%  
        var t1 = "Dies ist ein Text"  
        %>
        

        der hier definitiv keinen Sinn macht.
        So schon eher:

          
        var t1 = "<%= fooBar %>"  
        
        

        Schön wäre wenn du ein funktionierendes Online-Beispiel deines statischen Tickers zeigen könntest.

        gruesse qx

        1. Hi....

          hier habe ich ein funktionierendes Beispiel:

          http://avalonis.at/admin/tickertest.htm

          LG

          Max

          1. @@Max

            hier habe ich ein funktionierendes Beispiel:
            http://avalonis.at/admin/tickertest.htm

            Hier ist eine abgeänderte, sich an aktuellen Standards orientierende Version (ohne Layout-Tabellen, ohne Form, ohne inline-styles) deines Beispiels !

            <!DOCTYPE html>  
            <html lang="de">  
            <head>  
            <meta charset="UTF-8">  
            <title>Ticker</title>
            

            Hier erstellst du deinen Ticker per VBScript:
            <script>

            var msg = [  
                'Vorwort: Willkommen auf js.Welt.de.',  
                'Durchsuchen Sie diese Website',  
                'FAQ zu allen möglichen Sachen!',  
                'Ich hoffe es gefällt Ihnen hier!'  
            ];
            

            </script>

            In einer externen Script-Datei:
            <script src="./zum-Script-Ordner/ticker.js"></script>
            oder direkt nach obigem Script-Block mit den Meldungen folgt die textticker Funktion.

            <script>  
            var cnt = 0, pos = 0, tickLen = msg[0].length;  
              
            function textticker () {  
                document.getElementById('textfeld').innerHTML = msg[cnt].substring(0, pos) + '_';  
                if ( pos++ === tickLen ) {  
                    pos = 0;  
                    cnt++;  
                    if ( cnt === msg.length ) { cnt = 0; }  
                    tickLen = msg[cnt].length;  
                    setTimeout('textticker()', 1000);  
                }  
                else {  
                    setTimeout('textticker()', 50);  
                }  
            }  
              
            window.onload = function() {  
                textticker()  
            }  
            </script>
            
            </head>  
              
            <body>  
            <h1 id="textfeld">Willkommen</h1>  
            </body>  
            </html>
            

            Deine Script-Version eignet sich nicht um es in zwei Script-Blöcke aufzuteilen, folglich habe ich es abgeändert.

            gruesse qx

            1. Cool danke!

              ;-)

              Werde ich gleich mal testen!

      3. @@Max:

        nuqneH

        Dies ist ein Ticker, der sich selbst aktualisiert, funktioniert auch gut.

        Nein. Ticker funktionieren auf Webseiten nicht gut.

        Ich hoffe, ich habe mich nun etwas verständlicher ausgedrückt.

        Ich vermisse immer noch die Antwort auf meine Frage. Werden die Daten (Texte) nach dem Laden der Seite nochmal geändert?

        Qapla'

        --
        „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
        1. @@Max:

          nuqneH

          Dies ist ein Ticker, der sich selbst aktualisiert, funktioniert auch gut.

          Nein. Ticker funktionieren auf Webseiten nicht gut.

          Nun ja. ZB. Die sueddeutsche.de macht das ganz geschickt, aber die haben auch ständig aktuelle News ;-), dennoch habe ich ein funktionierendes Beispiel zusammengebastelt, welches tatsächlich von einem VBScript Array (das könnte auch ein Dictionary-Object oder ein db-RecordSet sein, etc…) gefüttert wird.

          gruesse qx

        2. Hi!

          Die Daten werden ca. 1 Mal im Monat aktualisiert oder eben nicht angezeigt, wenn es keine Neuigkeiten gibt.

          Also keine laufende Aktualisierung der Daten.

          LG

          Max

  2. Om nah hoo pez nyeetz, Max!

    Es gibt, bzw. gab, einen <script language="JavaScript" runat="server">, da dies beide Scripts am Server ermöglichen soll.
    Funktioniert halt nicht wirklich.

    Hat sicherlich mit deinem „funktioniert nicht“ nur am Rande bis garnicht zu tun aber: »Ebenfalls überflüssig: language="JavaScript" beim script-Element. Sinnvoll war das noch nie; je nach HTML-Version/-Variante ist es auch falsch. (In HTML 4 war hingegen type="text/javascript" nötig.)« [Gunnar Bittersmann]

    Es geht mir nicht um irgendeine Syntax, es geht mir ums Verständnis: GEHT DAS, oder GEHT DAS NICHT!

    Du brauchst nicht zu schreien ;-)

    Wenn JA, wäre ich um eine Hilfe sehr dankbar!

    Hotti hat dir ja schon geschrieben, dass es möglich ist und dass die Technologie AJAX heißt. Nun ist es an dir, eine bessere Fehlerbeschreibung zu liefern, was hast du schon versucht, …

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Fries und Friese.

    1. @@Matthias

      »Ebenfalls überflüssig: language="JavaScript" beim script-Element. Sinnvoll war das noch nie; je nach HTML-Version/-Variante ist es auch falsch.

      Bei runat="server" war language="JavaScript" schon sinnvoll, soweit den JScript geschrieben wurde und es serverseitig ausgeführt werden sollte:

      <script language="JavaScript" runat="server">  
      // gemeint ist JSCript  
      var dbDict = new ActiveXObject("Scripting.Dictionary");  
      dbDict.add("a", "Max");  
      </script>
      

      gruesse qx

  3. @@Max:

    nuqneH

    oder einfach nur das ganze nicht richtig verstanden.

    Du müsstest dein Problem so weit verstehen, dass du es so beschreiben kannst, dass wir es auch verstehen.

    Es werden Daten aus einer *.MDB gelesen, diese wiederum in eine Variable.

    OK, die Daten werden beim Seitenaufruf aus der Datenbank geholt und im HTML zum Client geschickt …

    Danach folgt ein JavaScript, welches einen "News-Ticker" auf der HP anzeigt, bzw. anzeigen soll, mit genau diesen Werten der Variablen.

    … wozu dann das JavaScript?

    Oder sollen die Daten auf der bereits im Browser dargestellten Seite dynamisch aktualisiert werden? Wenn ja, wie ausgelöst? Alle dreiundzwölfzig Sekunden?

    Qapla'

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
  4. Hallo Max,

    so ganz ohne Beispiel ist das kaum zu verstehen!

    Jedoch Clientseitig möchte ich diese ausgelesenen Daten an das Script übergeben, damit es natürlich auch funktioniert.

    Willst du aus deiner db nur einen Datensatz in einige „var’s“ schreiben oder ein „mehrdimensionales Array“ befüllen?

    Es gibt, bzw. gab, einen <script language="JavaScript" runat="server">, da dies beide Scripts am Server ermöglichen soll.

    runat="server" meint nicht das clientseitige <script type="text/javascript">

    Funktioniert halt nicht wirklich.

    Classic ASP spricht VBScript oder JScript am Server!
    Als javascript Ausgabe kannst du z.B. mit VBScript so etwas machen:

    <script>  
    var vname = '<%= rs("vorname") %>',  
    nname = '<%= rs("nachname") %>';  
    alert(vname + ' ' + nname);  
    </script>
    

    Es geht mir nicht um irgendeine Syntax, es geht mir ums Verständnis: GEHT DAS, oder GEHT DAS NICHT!

    Also es geht, es müssen halt die „Classic ASP Design Mistakes“ beachtet werden.

    gruesse qx

    1. Moin Quincunx,

      <script>

      var vname = '<%= rs("vorname") %>',
      nname = '<%= rs("nachname") %>';
      alert(vname + ' ' + nname);
      </script>

        
      Ich kenne mich mit VBScript nicht aus, wird hier das korrekte Escaping im JS-Kontext beachtet?  
        
      LG,  
       CK  
      
      -- 
      <http://ck.kennt-wayne.de/>  
      
      
      1. Hallo Christian,

        <script>

        var vname = '<%= rs("vorname") %>',
        nname = '<%= rs("nachname") %>';
        alert(vname + ' ' + nname);
        </script>

        
        >   
        > Ich kenne mich mit VBScript nicht aus, wird hier das korrekte Escaping im JS-Kontext beachtet?  
          
        Nein, du hast recht, auch darum muss man sich kümmern, aber da die Daten aus einer db kommen, sollte das schon beim Befüllen derselben geschehen sein.  
        Zu anderen wollte ich nur sagen das es GEHT, denke aber auch das er nach einer AJAX-Antwort sucht.  
          
        gruesse qx  
        
        
        1. Om nah hoo pez nyeetz, Quincunx!

          Ich kenne mich mit VBScript nicht aus, wird hier das korrekte Escaping im JS-Kontext beachtet?

          Nein, du hast recht, auch darum muss man sich kümmern, aber da die Daten aus einer db kommen, sollte das schon beim Befüllen derselben geschehen sein.

          Warum sollten Daten javascriptgerecht aufbereitet in einer Datenbank liegen?

          Matthias

          --
          Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Mini und Ministerium.

          1. @@Matthias

            Warum sollten Daten javascriptgerecht aufbereitet in einer Datenbank liegen?

            Zum einen mögen MSSQL-db keine „'“, = Fehler 500 und mit den MSSQL-Views werden die Daten so ausgegeben wie ich sie brauche, sie kommen aufbereitet aus der db.

            Zweitens sind „escape && unescape“ deprecated, verwende ich nicht mehr.
            Bei einem Vorname den ich in meinem  Beispiel var vname = '<%= rs("vname") %>'; ausgeben würde, wüsste ich nicht was mir noch Schwierigkeiten bereiten könnte.

            encodeURI() zB. bezieht sich auf URI nicht auf Vornamen-Strings.

            gruesse qx

            1. Moin Quincunx,

              Warum sollten Daten javascriptgerecht aufbereitet in einer Datenbank liegen?

              Zum einen mögen MSSQL-db keine „'“, […]

              Ich habe zwar nicht die meiste Erfahrung mit MSSQL, aber ich weiß, dass sie unter Verwendung der bekannten Escaping-Mechanismen (MS SQL verhält sich hier Standard-Gemäß, ein ' wird also mit einem weiteren ' escaped: '' ergibt in dem String in der Datenbank hinterher ein einzelnes ') ohne Probleme verwendet werden können.

              = Fehler 500 und mit den MSSQL-Views werden die Daten so ausgegeben wie ich sie brauche, sie kommen aufbereitet aus der db.

              Auch hier stimmt etwas nicht oder ich verstehe deine Aussage nicht richtig. Du willst für die Ausgabe eines Werts nach JavaScript extra eine View machen, die dir das Escaping abnimmt? Klingt für mich nicht plausibel, Views sind eigentlich nicht dazu gedacht. Und es macht die Sache nun wirklich massiv komplizierter.

              Zweitens sind „escape && unescape“ deprecated, verwende ich nicht mehr.
              Bei einem Vorname den ich in meinem  Beispiel var vname = '<%= rs("vname") %>'; ausgeben würde, wüsste ich nicht was mir noch Schwierigkeiten bereiten könnte.

              Du wechselst den Kontext, wenn du JavaScript erzeugst. Das bedeutet, sämtliche Steuerzeichen, die in JavaScript in Strings genutzt werden, müssen escaped werden. Selbst wenn ich keine böswilligen Absichten habe kann sonst etwas kaputt gehen: wer sagt schießlich, dass ein Name kein ' enthalten darf?

              D.h. du musst, wenn du einen JS-String erzeugst, beachten, dass mindestens ', \ und " escaped werden, damit du das richtige Ergebnis erzielst.

              LG,
               CK

              1. @@Christian

                Zum einen mögen MSSQL-db keine „'“, […]
                Ich habe zwar nicht die meiste Erfahrung mit MSSQL, aber ich weiß, dass sie unter Verwendung der bekannten Escaping-Mechanismen (MS SQL verhält sich hier Standard-Gemäß, ein ' wird also mit einem weiteren ' escaped: '' ergibt in dem String in der Datenbank hinterher ein einzelnes ') ohne Probleme verwendet werden können.

                Apostroph gibt es bei mir nicht in der db.

                … Du willst für die Ausgabe eines Werts nach JavaScript extra eine View machen.

                Nein. Mein Beispiel habe ich so einfach wie möglich gehalten. Praktisch gibt es so etwas bei mir nicht. Ich hole entweder alle zum Kontext gehörigen Daten aus der db in dem ich angepasste Views verwende oder für AJAX nur eine Teilmenge daraus.

                Du wechselst den Kontext, wenn du JavaScript erzeugst. Das bedeutet, sämtliche Steuerzeichen, die in JavaScript in Strings genutzt werden, müssen escaped werden. Selbst wenn ich keine böswilligen Absichten habe kann sonst etwas kaputt gehen: wer sagt schießlich, dass ein Name kein ' enthalten darf?
                D.h. du musst, wenn du einen JS-String erzeugst, beachten, dass mindestens ', \ und " escaped werden, damit du das richtige Ergebnis erzielst.

                In den Formularen die im public Bereich eingesetzt werden gibt es nur plain-text und bevor etwas in die db wandert validiere und ersetze ich entweder Steuerzeichen (', ", <, >, &) durch HTML-Entities oder äquivalente Char-Codes (’, ”, ‹, ›).

                gruesse qx

                1. @@Quincunx:

                  nuqneH

                  In den Formularen die im public Bereich eingesetzt werden gibt es nur plain-text und bevor etwas in die db wandert validiere und ersetze ich entweder Steuerzeichen (', ", <, >, &) durch HTML-Entities oder äquivalente Char-Codes (’, ”, ‹, ›).

                  Grundlegender Fehler.

                  Qapla'

                  --
                  „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
                  1. Hola @@Gunnar:

                    In den Formularen die im public Bereich eingesetzt werden gibt es nur plain-text und bevor etwas in die db wandert validiere und ersetze ich entweder Steuerzeichen (', ", <, >, &) durch HTML-Entities oder äquivalente Char-Codes (’, ”, ‹, ›).

                    Grundlegender Fehler.

                    Das mag sein, doch wenn es denn Auftritt spielt es sich im ‰-Bereich ab.
                    (Grundlegender ‰ Fehler ;-)

                    gruesse qx

                    PS. Aber Danke für den Hinweis, werde ich drüber nachdenken.