Hallo Leute
Ich habe ein Problem mit JavaScript und AJAX mein Array zu füllen und an eine Funktion zu übergeben.
Ich habe ein HTML-Dokument mit einen Array, welches Dateinamen enthält, die Funktion autoload und buil_menu aufruft.
Die Funktion autoload ruft für jeden Wert des Array die Funktion getCSV auf und läadt die entsprechende Datei. Die Funktion getCSV ruft die Funktion ausgeben auf, welche mir ein Array mit dem Dateiinhalt erstellen soll. Hierliegt das erste Problem. Wie muss ich den Code dieser Funktion ändern, das ich für alle Datein den Inhalt in dem Array spreichere und nicht nur den Inhalt der zuletzten geladenen Funktion.
Die Funktion build_menu erzeugt mir ein menü mit Verweisen, wo ich mir den Inhalt der entsprechenden Datei anzeigenlassen möchte. Hier liegt das nächste problem. Wie müss ich das Array mit dem Dateiinhalt übergeben.
Hab auch bei den einzelen Funktionen noch ein paar Bemerkungen dazu geschrieben.
Hier kommt jetzt der Code zu den Funktionen:
HTML-Dokument
<html>
<head>
<title>AJAX</title>
<script type="text/javascript" src="autoload.js"></script>
<script type="text/javascript" src="getCSV.js"></script>
<script type="text/javascript" src="ausgeben.js"></script>
<script type="text/javascript" src="build_menu.js"></script>
<script type="text/javascript" src="sortieren.js"></script>
<script type="text/javascript" src="anzeige.js"></script>
<script type="text/javascript" src="loeschen.js"></script>
</head>
<body>
<div id="menu"></div>
<script type="text/javascript">
<!--
//Array für die Datein
dateiname = new Array( "lager.csv",
"werkstueck.csv",
"maschine.csv",
"fahrzeug.csv",
"verarbeitung.csv",
"lagerung.csv",
"transport.csv",
"prozess.csv"
);
autoload();
//erzeugen des Menüs
build_menu();
--></script>
<div id="Ausgabe"></div>
</body>
</html>
Alles anzeigen
Hier ist der Code der Funktion autoload()
//Array für den Inhalt der Datein
var dateiinhalt = new Array();
var name = null;
function autoload()
{
//Für jedes Element von "dateiname" wird die Funktion "getCSV" aufgerufen und der Inhalt in ein Array gespeichert
for (var i = 0; i < dateiname.length; i++)
{
// var array_hilfe = dateiname[i].split(".");
// name = array_hilfe[0];
// dateiinhalt[name][i] = getCSV(dateiname[i]);
getCSV(dateiname[i]);
}
}
Alles anzeigen
Das auskommentierte ist ein Versuch wie ichs mir gedacht habe, funktioniert aber nicht richtig
Funktion getCSV
var http = null;
function getCSV(dateiname)
{
//Üperprüfung um welchen Browser es sich handelt
if (window.XMLHttpRequest) { //Morzilla, Opera ...
http = new XMLHttpRequest();
}
else if (window.ActiveXObject) { //Internet Explorer
http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
//GET = http_Request_Methode
//dateiname = Pfad der Angeforderten Datei
//true = JS wird ausgeführt, während auf antwort des Servers gewartet wird (Reguest ist asynchron (= A in AJAX)
http.open("GET", dateiname, true);
http.onreadystatechange = ausgeben;
http.send(null);
}
//return dateiinhalt;
}
Alles anzeigen
Benötige ich hier eigentlich ein return oder nicht?
Funktion ausgeben
function ausgeben() {
if (http.readyState == 4) {
var buffer = http.responseText;
var columnarray = buffer.split("\n");
for (var x = 0; x < columnarray.length; x++) {
dateiinhalt[x]= new Array();
rowarray = columnarray[x].split(";");
for (var y = 0; y < rowarray.length; y++) {
dateiinhalt[x][y]=rowarray[y];
}
}
}
}
Alles anzeigen
Hier wird bei jedem aufruf der Funktion der Inhalt des Array dateiinhalt überschrieben. Wie muss ich das ändern das für jeden Aufruf der Inhalt der entsprechenden Datei in dem Array gespeichert wird?
Funktion build_menu()
function build_menu(){
var htm="<table><tr><td>Anzeige der Datein</td></tr>";
for(var n=0;n<dateiname.length;n++){
name = dateiname[n];
htm+="<tr><td><a href=\"javascript:anzeige('"+dateiinhalt+"');\">"+dateiname[n]+"</a></td></tr>";
}
htm+="<tr><td>Funktionen zur Verarbeitung</td></tr>";
htm+="<tr><td><a href=\"javascript:loeschen();\">löschen</a></td></tr>";
htm+="<tr><td><a href=\"javascript:sortieren();\">sortieren</a></td></tr>";
htm+="</table>";
document.getElementById("menu").innerHTML=htm;
}
Alles anzeigen
Mit dieser Funktion erstelle ich mir die Verweise, durch die die Funktion anzeige aufgerufen wird. Wie muss ich die Übergabe des Arrays dateiinhalt ändern. Ich möchte also wenn ich auf den Verweis lagerung.csv (entspricht dateiname[5]) klicke das mir der Inhalt von Lagerung.csv angezeigt wird. Hoff ich hab mich verständlich ausgedrückt.
Hier ist noch der Code der Funktion anzeige
function anzeige(inhalt) {
var output = '<table border=1>';
for (var x = 0; x < inhalt.length; x++) {
output = output + '<tr>';
for (var y = 0; y < inhalt[x].length; y++) {
output = output + '<td>' + inhalt[x][y] + '</td>';
}
output = output + '</tr>';
}
output = output + '</table>';
document.getElementById("Ausgabe").innerHTML = output;
}
}
Alles anzeigen
Diese Funktion sollte mir jetzt eigentlich den Dateiinhalt der jeweiligen Datei tabellarisch anzeigen. Bekomme aber die Fehlermeldung das length bei der zweiten For-Schleife NULL oder kein Objekt ist. Wo liegt mein Fehler.
Ist ein sehr langer post. Ich hoffe ihr könnt mir trotzdem weiter helfen. Hab bisher nur gut Erfahrungen mit euch gemacht.
Tschau und Danke für die Hilfe
Jessica