tschanne: ASP Recordset in JS Array

Ich bin gerade beim Versuch, ein ASP Recordset in ein JS-Array abzufüllen, allerdings funktioniert das noch nicht ganz. kann mir jemand sagen wo der fehler liegt?

<script type="text/javascript">
  function DD(BI)
  {
  alert(BI);

var z = 0;

var BI1 = new Array();

BI1[0] = new Array(0);

var max = <%=rsBI1.RecordCount%>;

while(z < max)
  {
  <%
  while not rsBI1.EOF
  %>
   BI1[z][1] = <%=rsBI1("MID")%>;
   BI1[z][2] = <%=rsBI1("Beschaffungsinstrument")%>;

<%
  rsBI1.MoveNext
  wend
  %>

z++;
  }
   alert("test")
   alert(BI1[1][2]);
  }

</script>

  1. Moin,

    Ich bin gerade beim Versuch, ein ASP Recordset in ein JS-Array abzufüllen, allerdings funktioniert das noch nicht ganz. kann mir jemand sagen wo der fehler liegt?

    Was genau bedeutet "funktioniert noch nicht ganz" ?

    MfG
    MarkX.

  2. Hi ,

    Ich bin gerade beim Versuch, ein ASP Recordset in ein JS-Array abzufüllen, allerdings funktioniert das noch nicht ganz. kann mir jemand sagen wo der fehler liegt?

    was funktioniert nicht? Wie heisst der Fehler? Was soll erscheinen, und erscheint stattdessen?

    ohne Infos dazu kann Dir keiner helfen.

    ciao
    romy

    1. was funktioniert nicht? Wie heisst der Fehler? Was soll erscheinen, und erscheint stattdessen?

      Das JS Array füllt nur die rsBI1("MID") ins Array, den Rest net, das weiss ich weil ichs mittels alert überprüft habe, stattdessen gibt der ie die Meldung: undefined ist kein Objekt (oder so)
      mit den Zeilenangaben kann man nichts anfangen

      ohne Infos dazu kann Dir keiner helfen.

      ciao
      romy

  3. Hallo tschanne,

    BI1[z][1] = <%=rsBI1("MID")%>;
       BI1[z][2] = <%=rsBI1("Beschaffungsinstrument")%>;

    Wenn der Wert von Beschaffungsinstrument ein String ist, dann fehlen die Anführungszeichen:
    BI1[z][2] = '<%=rsBI1("Beschaffungsinstrument")%>';

    Grüße
    Andreas

    --
    "Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning."
    (Rich Cook)
    1. hi,
      genau das wars :)
      vielen dnak
      mfg tschanne

  4. Moin!

    Ich bin gerade beim Versuch, ein ASP Recordset in ein JS-Array abzufüllen, allerdings funktioniert das noch nicht ganz. kann mir jemand sagen wo der fehler liegt?

    Du denkst zu kompliziert!

    Du programmierst hier eine Schleife in Javascript, deren Code generiert wird durch eine Schleife in ASP/VBScript.

    Warum hast du die Javascript-Schleife drin? Man verwendet Schleifen doch eigentlich nur, damit man Dinge nur einmal programmieren muß, aber mehrfach ausführen kann.

    Gib schlichten Javascript-Code aus! Du willst ein Recordset aus ASP in ein Array in Javascript überführen? Gut. Der Code in fertigem Javascript sieht so aus:

    var BI1 = new Array();
    var BI1[0] = new Array();
    var BI1[0][0] = "dein String 1";
    var BI1[0][1] = "dein String 2";
    var BI1[1] = new Array();
    var BI1[1][0] = "....";
    ... und so weiter.

    Natürlich kann man die Arraydefinition auch abkürzen:
    var BI1 = new Array();
    var BI1[0] = new Array("dein String 1","dein String 2","weitere Strings...");
    var BI1[1] = new Array("...","und so weiter...");

    Deine Aufgabe in ASP ist es jetzt nur noch, so einen Text zu generieren und an den Browser zu schicken.

    Denn deine Schleife hier läuft noch aus ganz anderen Gründen schief! Insbesondere definiert sie nur für BI1[0] ein neues inneres Array, nicht aber für die folgenden Elemente.

    Und ich bezweifle auch ernsthaft, ob es dir was bringt, wenn alle deine JS-Arrayelemente gleich sind.

    while(z < max)
      {
      <%
      while not rsBI1.EOF
      %>
       BI1[z][1] = <%=rsBI1("MID")%>;
       BI1[z][2] = <%=rsBI1("Beschaffungsinstrument")%>;
      <%
      rsBI1.MoveNext
      wend
      %>

    z++;
      }

    Der resultierende Code dieser Schleife wird sein:

    while(z < max)
     {
      BI1[z][1] = "MID-1";
      BI1[z][2] = "Beschaffungsinstrument-1";
      BI1[z][1] = "MID-2";
      BI1[z][2] = "Beschaffungsinstrument-2";
      BI1[z][1] = "MID-3";
      BI1[z][2] = "Beschaffungsinstrument-3";
      BI1[z][1] = "MID-4";
      BI1[z][2] = "Beschaffungsinstrument-4";
      z++;
     }

    Und das ist ganz sicher nicht, was du willst.

    Beachte außerdem beim Ausgeben deines Strings, dass enthaltene doppelte und/oder einfache Anführungszeichen des TEXTES Auswirkungen auf den entstehenden Javascript-Code haben werden und entsprechend escapet werden müssen.

    - Sven Rautenberg

  5. Hi,

    imho gehst du falschherum vor, du musst "in ASP" mit einer Schleife
    über das Recordset die Ausgabe an den Clientbrowser schreiben.
    Du kannst kein (erst später laufendes) clientseitiges JS mit serverseitigem
    ASP verkitten, und besonders nicht in einer JS-Funktion, bin ich der
    Meinung.

    Was ASP an den Client zurückschreiben muss, ist

    Response.Write("<script type='text/javascript'>")
    Response.Write("var BI1 = new Array();")
    i = 0
    do until rsBI1.EOF
      Response.Write("BI1[" + i + "] = new Array(2);")
      Response.Write("BI1[" + i + "][0] = " + rsBI1("MID") + ";")
      Response.Write("BI1[" + i + "][0] = " + rsBI1("Beschaffungsinstrument") + ";")
      i = i + 1
    loop
    ...
    Response.Write("</script>")

    das ergäbe dann, wenn es auf Client-Seite ankommt:

    <script type="text/javascript">
    var BI1 = new Array();
    BI1[0] = new Array(2);
    BI1[0][0] = "wert01";
    BI1[0][1] = "wert02";
    BI1[1][0] = "wert11";
    BI1[1][1] = "wert12";
    ....
    </script>

    Viele Grüße,
    Frank

  6. Jetzt hab ich ein neues problem:
    wenn ich das Recordset mit einer WHERE-Klausel beschränke, dann funktioniert es, ist das RecordSet allerdings grössen, und ich lese daten ohne where aus der db, funktioniert es nicht mehr, und es gibt die JS-Fehlermeldung ; erwartet, was allerdings gar nicht sein kann

    var z = 0;
      var s = 0;

    var BI1 = new Array();
      BI1[0] = new Array(0);

    var max = <%=rsBI1.RecordCount%>;
      alert(max);
      while(z < max)
      {
       <%
       while not rsBI1.EOF
       %>
       BI1[z][1] = <%=rsBI1("MID")%>;
       BI1[z][2] = <%=rsBI1("Beschaffungsinstrument")%>;
       BI1[z][3] = '<%=rsBI1("Bezeichnung")%>';
       alert(BI1[z][3])
       <%
       rsBI1.MoveNext
       wend
       %>
       z++;
      }

    1. Moin!

      Jetzt hab ich ein neues problem:

      Du hast zwei Antworten zu deinem alten Problem noch nicht beachtet. Vielleicht solltest du zuerst mal dein altes Problem lösen, bevor du mit einem neuen ankommst. :)

      - Sven Rautenberg