# Aus JS eine Variable an ASP Function übergeben



## Otaner (1. April 2008)

Sorry dafür dass ich mich nicht im JS auskenne und euch mit so Simplen Sachen belästige, aber nach soviel suche im Netz finde ich keine passende Eklärung für mein nichtfunktionierendes JS-Code 

Es ist so, ich versuche in JS ein Wert aus einem ASP(Javascript) Array über eine ASP Funktion auslesen. Es funktioniert wenn ich fixe Werte zum aufruf im JS eingib, aber nicht wenn ich eine Variable verwende. und ich finde einfach nicht die richtige Syntax dafür.

Hier Teilcode:

ASP:
var mein_array = new Array (10)
....
function array_abrufen(m) {
 return mein_array[m] ;
}

JS:

var x = 2;
var y = 0;

alert (x);                                       //test1 liefert:2
alert ;                                       //test1 liefert:0

y = " <% =(array_abrufen(2) ) %> ";   //funktioniert und liefert wert aus mein_array(2)

y = " <% =(array_abrufen(x) ) %> ";   //funktioniert nicht, meldet fehler dass variable x nicht deklariert wurde

was mach ich da falsch?

Bitte um Hilfe 
und Vielen Dank


----------



## Quaese (2. April 2008)

Hi,

ASP wird serverseitig ausgeführt, JS clientseitig. D.h. wenn die Variable *x* im JS deklariert wird, wurde der ASP-Teil schon ausgeführt. Da *x* dort noch nicht bekannt ist kommt es zur Fehlermeldung.

Ciao
Quaese


----------



## Otaner (2. April 2008)

Vielen Dank für die Antwort Quaese!

Das ist mir schon klar das ASP Serverseitig ausgeführt wird. 
Meine Frage war ob ich irgendwie "mein_array" abfragen kann? weil mit eine fixe Zahl im beispielcode:    

y = " <% =(array_abrufen(2) ) %> ";     

funktioniert es, und die dritte stelle im array wird ausgelesen und zurückgegeben. also kein problem.
ich möchte "2"  irgendwie ersetzten (mit variable). weil es in eine schleife dann laufen soll und die werte verändern sich immer wieder.
ich gehe davon aus das es nur mit Syntaxe zu tun hat, weil Befehl aufruf falsch ist. aber ich komme nicht drauf wie es gehen soll.
Oder gibt es einen anderen Weg diese Array Werte die im ASP gelesen wurden dann im Javascript abfragen?

Vielen Dank


----------



## Quaese (2. April 2008)

Hi,

das ASP-Script von JS aus zu starten ist nicht möglich. 

Du könntest jedoch die Werte des ASP-Arrays als JavaScript-Array ins Dokument schreiben. Ausserdem wird die Funktion *array_abrufen* in JavaScript übergeführt.

Beispiel:

```
<% @ Language="VBScript" @LCID=1031 %>
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">
  <%
    Dim mein_array(10)
    Dim i

    ' ASP-Array erstellen
    For i = 0 To 10
      ' Array mit Werten füllen
      mein_array(i) = Sqr(i)
    Next

    Response.LCID = 1033
    ' ASP-Array als JS-Array ins Dokument schreiben
    Response.Write("var mein_array = new Array (10);")
    For i = 0 To 10
      ' Array als JS-Array in Dokument schreiben
      Response.Write("mein_array["&i&"]="&mein_array(i)&";"&vbLf)
    Next
    Response.LCID = 1031
  %>

  // Funktion in JS
  function array_abrufen(m) {
    return mein_array[m];
  }

  var x = 6;

  y = <% ="array_abrufen(x)" %>;

  alert (y);
</script>
</head>
<body>

</body>
</html>
```
Ciao
Quaese


----------



## Otaner (3. April 2008)

Hi Quaese, 
dein Beispiel funktioniert super, 
hab dazu noch einpaar Fragen.
Hier dein Code etwas anders:


```
<% @ Language="VBScript" @LCID=1031 %>
  <%
    Dim mein_array(10)
    Dim i

    ' ASP-Array erstellen
    For i = 0 To 10
      ' Array mit Werten fllen
      mein_array(i) = Sqr(i)
    Next

    Response.LCID = 1033
    ' ASP-Array als JS-Array ins Dokument schreiben
    Response.Write("var mein_array = new Array (10);")
    For i = 0 To 10
      ' Array als JS-Array in Dokument schreiben
      Response.Write("mein_array["&i&"]="&mein_array(i)&";"&vbLf)
    Next
	
	
    Response.LCID = 1031
  %>
<html>
<head>
<title>www.tutorials.de</title>
<meta name="author" content="Quaese">
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">

  // Funktion in JS
  function array_abrufen(m) {
    return mein_array[m];
  }

  var x = 6;
  y = <% ="array_abrufen(x)" %>;
  alert (y);

</script>
</head>
<body>

</body>
</html>
```

wie du gemerkt hast hab ich dein VB Teil nach oben verschoben da wo ich es in meinem Code brauchen werde und schon bekomme ich gleiches problem. Variable x ist dem Browser unbekannt.

Weiterhin ist hier mein Code mit einpaar funktionierenden Alerts und eine Schleife die nicht funktioniert  
Muss ich Datenbank unbedingt oben schon auslesen oder kann ich sie unten im Script auch lesen? Hättest du vielleicht eine Idee als bessere lösung? Die Aufgabe ist doch ganz einfach. Daten eine Datenbank in ein Array reinspielen und dann beim Client (z.B. als Alert) verwenden.


```
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>
<!--#include file="../Connections/Daten_DB.asp" -->

<%
var Recordset1_cmd = Server.CreateObject ("ADODB.Command");
Recordset1_cmd.ActiveConnection = MM_db_connection_STRING;
Recordset1_cmd.CommandText = "SELECT * FROM adressen";
Recordset1_cmd.Prepared = true;

var Recordset1 = Recordset1_cmd.Execute();
var Recordset1_numRows = 0;
var die_daten = new Array(5);


  for (Recordset1_total=0; !Recordset1.EOF; Recordset1.MoveNext()) {
  	die_daten[Recordset1_total] = Recordset1.Fields.Item("id").Value;
  	die_daten[Recordset1_total] = Recordset1.Fields.Item("Name").Value;
  	die_daten[Recordset1_total] = Recordset1.Fields.Item("Vorname").Value;
  	die_daten[Recordset1_total] = Recordset1.Fields.Item("Adresse").Value;
  	die_daten[Recordset1_total] = Recordset1.Fields.Item("PLZ").Value;
  	die_daten[Recordset1_total] = Recordset1.Fields.Item("Ort").Value;
	Recordset1_total++;
	}

  function datenbank_array(n) { 
  	//return  n ;
	return die_daten[n];
  }
  
  function rs_count () {
  	return Recordset1.RecordCount;
  }

%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Mein Beispiel</title>
<script type="text/javascript">

    //<![CDATA[

		alert (" <% =(datenbank_array(0)) %>") ;
		alert (" <% =(datenbank_array(1)) %>") ;
		alert (" <% =(datenbank_array(2)) %>") ;
		alert (" <% =(datenbank_array(3)) %>") ;
		alert (" <% =(datenbank_array(4)) %>") ;
		alert (" <% =(datenbank_array(5)) %>") ;

	var x1 = 0;
	for (x1 = 0; x1 < 5; x1++) {
		alert (" <% =(datenbank_array( x1 )) %>") ;
	}

    //]]>
    </script>
</head>
<body>
</body>
</html>
<%
Recordset1.Close();
%>
```


----------



## Quaese (4. April 2008)

Hi,

wie bereits in meinem letzten Posting geschrieben, muss du das ASP-Array in einen JS-Bereich schreiben. So wie du es planst, musst du eben auch den benötigten Scriptbereich fürs JS ins Dokument schreiben. In diesen Bereich schreibst du dann das JS-Array, das sich aus dem ASP-Array ergibt.

Ausserdem wird die Funktion zum Ausgeben des Arraywertes als JS-Routine ebenfalls in einen JS-Bereich geschrieben.

```
<% @LANGUAGE="JAVASCRIPT" CODEPAGE="65001"%>

<%
  var intAnz = 5;
  var die_daten = new Array(intAnz);

  // Datenbank-Array simulieren
  for (var i=0; i<intAnz; i++) {
    die_daten[i] = Math.sqrt(i);
  }

  // JS-Bereich ins Dokument schreiben
  Response.Write("<script type=\"text/javascript\">\n")
  Response.LCID = 1033
  //ASP-Array als JS-Array ins Dokument schreiben
  Response.Write("var die_daten = new Array (10);\n")
  for (var i=0; i<intAnz; i++) {
    //Array als JS-Array in Dokument schreiben
    Response.Write("die_daten["+i+"]="+die_daten[i]+";\n")
  }
  Response.LCID = 1031
  // JS-Bereich wieder schliessen
  Response.Write("</script>\n")


  function rs_count () {
    //return Recordset1.RecordCount;
  }
%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Mein Beispiel</title>
<script type="text/javascript">
  //<![CDATA[

  function datenbank_array(n) {
    return die_daten[n];
  }

  var x1 = 0;
  for (x1 = 0; x1 < 5; x1++) {
    alert (<%="datenbank_array(x1)"%>) ;
  }

    //]]>
    </script>
</head>
<body>
</body>
</html>
```
Um dir die JS-Bereiche vorstellen zu können, schaust du am besten mal in den vom Browser erstellten Quellcode. Dort siehst du, wie die JS-Arrays erstellt wurden.

Ciao
Quaese


----------



## Otaner (7. April 2008)

Ja, tausend Dank Quaese!

Habe es im ASP umgeschrieben, jetzt stehen zwar alle Daten im Quelltext drin aber es Funktioniert auf jedem fall 

Danke nochmal!


----------

