document.write();
Schreibt ins HTML-Document aber während des Abarbeiten des Headers besteht das noch nicht!
Packe alles in eine function (im Javascript) und rufe diese im Body-Tag onload auf, dann sollte es klappen.
Hallo zusammen!
Ich habe eine PHP-Datei in der ich einen PHP-Array an Javascript übergebe.
Nach der Übergabe möchte ich überprüfen, ob wirklich das Richtige angekommen ist. Der Code dazu sieht so aus:
Im Quelltext kommt dann das raus:PHP-Code:echo "<script type=\"text/javascript\">\n";
echo "var Nachrichten = new Array();\n";
for ($i=1;$i<=$zaehler;$i++)
{
echo "Nachrichten[$i] = '$arrnachrichten[$i]';\n";
}
echo "document.write(Nachrichten[1]);\n";
echo "alert(\"blabla\");\n";
echo "</script>\n";
Soweit so gut.Code:<script type="text/javascript"> var Nachrichten = new Array(); Nachrichten[1] = '--Nachricht1--.'; Nachrichten[2] = '--Nachricht2--'; Nachrichten[3] = '--Nachricht3--'; Nachrichten[4] = '--Nachricht4--'; Nachrichten[5] = '--Nachricht5--'; document.write(Nachrichten[1]); alert("blabla"); </script>
Das Problem ist jetzt, dass das "document.write(Nachrichten[1]);" nicht ausgeführt wird, was ja eigentlich ein Zeichen dafür ist, dass der Array leer ist.
Ich habe jetzt aber auch mal einen Test mit "alert("blabla");" eingebaut, aber selbst das funktioniert nicht!
Habe mit Ausgabeformaten schon so ziemlich alles durchprobiert. altert, document.write, getElemtByID, usw. Nichts funkioniert.
Ich habe auch schon die alert-function in anderen HTML-Dateien ausprobiert. Da funktioniert sie. Nur in dieser PHP-Datei gehts nicht. Woran kann das liegen?
document.write();
Schreibt ins HTML-Document aber während des Abarbeiten des Headers besteht das noch nicht!
Packe alles in eine function (im Javascript) und rufe diese im Body-Tag onload auf, dann sollte es klappen.
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Wie soll das funktionieren?
Die Javascript function wird doch per PHP erzeugt. Und die PHP-Variablen die dazu nötig sind, sind doch im Header noch gar nicht vorhanden.
Habs ausprobiert, und wie zu erwarten geht es nicht.
Und wenn du den body-Tag auch per PHP schreiben lässt und dann eben die Funktion aufrufst (möglicherweise ein Denkfehler von mir)?
+lg Nightline
-------------------------
Fotoportfolio: http://www.coeser.de/showcase/
Städte-Fotos aus aller Welt: http://www.coeser.de/impressions/
DeviantArt-Account: http://nightline.deviantart.com
Ein JavaScript hat nur eine function, wenn diese als solche definiert ist.
function name(argument/e) {
Anweisungen...
}
Daraus resultiert dann:PHP-Code:echo "<script type=\"text/javascript\">\n";
echo "function anzeige(){ \n";
echo "var Nachrichten = new Array();\n";
for ($i=1;$i<=$zaehler;$i++)
{
echo "Nachrichten[$i] = '$arrnachrichten[$i]';\n";
}
echo "document.write(Nachrichten[1]);\n";
echo "alert(\"blabla\");\n";
echo } n";
echo "</script>\n";
<script type="text/javascript">
function anzeige() {
var Nachrichten = new Array();
Nachrichten[1] = '--Nachricht1--.';
Nachrichten[2] = '--Nachricht2--';
Nachrichten[3] = '--Nachricht3--';
Nachrichten[4] = '--Nachricht4--';
Nachrichten[5] = '--Nachricht5--';
document.write(Nachrichten[1]);
alert("blabla");
}
</script>
und dann noch:
<body onload="anzeige()">
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Okaaay...![]()
Nur nochmal zum Verständnis im Klartext:
Ich habe eine PHP-Datei.
In dieser PHP-Dateien wird innerhalb des body-tags ein Array mit News vollgestopft.
Wie soll Javascript im head-tag auf Variblen aus dem body-tag zugreifen, die es im head noch gar nicht gibt??
Bin ich irgendwie zu doof, oder versteht ihr mein Problem nicht?!![]()
![]()
Ich bin schonmal einen Schritt weiter.
Ich habe herausgefunden, dass nicht definierte Variablen, die man mit alert ausgibt ein "undefined" ausspucken.
Ich hab jetzt mal die Deklarierung für den Nachrichten-Array aus dem PHP rausgenommen und separat direkt hinter das body-Tag geschrieben.
Und siehe da: In der Alert-Box steht "undefined".
Das heißt, das, was in der PHP-for-schleife steht, wird gar nicht gemacht!
Edit:
Nochmal einen Schritt weiter. Hab das ganze jetzt mal so umgebaut:
Das Problem liegt definitiv in der ZeilePHP-Code:<script type="text/javascript">
var Nachrichten = new Array();
<?
for ($i=1;$i<=$zaehler;$i++) {
echo "Nachrichten['".$i."'] = '".$arrnachrichten[$i].") ';";
}
?>
alert(Nachrichten.length);
alert(Nachrichten['1']);
</script>
" echo "Nachrichten['".$i."'] = '".$arrnachrichten[$i].") ';"; "
und zwar beim $i von $arrnachrichten[$i]. Wenn ich anstatt $i zum Beispiel 2 schreibe, kommt ein vernünftiges Ergebnis.
Mit $i, bleibt die Variable nicht definiert.
Warum??? Ich verzweifl hier...![]()
![]()
Geändert von Sand*mann (14.10.2006 um 02:51 Uhr)
Warum das mit $i nicht funzt, sehe ich jetzt auch nicht.
Oder ist $zaehler nicht definiert?
zB: $zaehler = arrnachrichten.length;
Zum andern:
1. Wenn Du die JS-Funktion onload ausführst (dh: wenn die Seite fertiggeladen ist), dann ist alles im Body im Zugriff der Funktion.
2. Das geht um Ecken rum!
Wozu brauchst Du diese JS-Funktion?
Erstelle im PHP Deine Nachrichten dort wo Du sie in der Seite haben willst.
zB. in einer <ul> oder einer <table>
?>PHP-Code:echo "<body>\n";
echo "<h1>Meine Nachrichten</h1>\n";
echo "<table>\n";
$zaehler = arrnachrichten;
for ($i=1;$i<=$zaehler;$i++) {
echo "<tr><td>" . $i . "</td><td>" . $arrnachrichten[$i] . "</td></tr>\n";
}
echo "</table>\n";
echo "</body>\n";
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Neinnein, $zaehler ist auf jeden Fall definiert, sonst würde später im Quelltext auch nicht etwas
Nachrichten[1] = '--Nachricht1--.';
Nachrichten[2] = '--Nachricht2--';
Nachrichten[3] = '--Nachricht3--';
Nachrichten[4] = '--Nachricht4--';
Nachrichten[5] = '--Nachricht5--';
artiges stehen. Denn dann würde die for-Schleife ja nicht ausgeführt.
Achso ist das!
Ok, wozu ich das brauche ist etwas kompliziert.
Also ich möchte die News erstmal gekürzt ausgeben. 90 Zeichen oder so. Dahinter kommt dann ein Link "mehr" der mit der function belegt ist, mit der die komplette Nachricht angezeigt wird. Ich mache das ganze in Javascript, damit nicht extra neue Seiten geladen werden müssen, sonder alles in einem Fenster passiert. Dazu muss aber erstmal die Nachrichten in javascript haben. Und genau das funktioniert irgendwie nicht...
Edit: ICH HAB DEN FEHLER GEFUNDEN!!!
Es lag an zwei Zeilenumbrüchen in einer Nachricht! Die kann der anscheinend nicht als String in den Array schreiben^^
Geändert von Sand*mann (14.10.2006 um 14:51 Uhr)
Dieses Auf- und Zufalten scheint ja IN zu sein, liesst man hier immer wieder was.
Das kann aber auch mit CSS gelöst werden und dann singst Du
Nun ade Du mein lieb Java-Script, lieb Java-Script adeeee ...![]()
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]
use my HTML-Tester
Motto'06: Mut zur deutschen Sprache!
Lieb Javascript? Das ist mein erstes Projekt mit dieser Sprache^^
Wie kann ich denn mit CSS die Nachricht automatisch abkürzen?
Hab jetzt lange Google, die Forenduche und mich mit manuellem Suchen gequält, und nichts ähnlcihes gefunden. Ich bräuchte mal ein Beispiel, wie du das meinst!
Geändert von Sand*mann (15.10.2006 um 01:40 Uhr)
Wenn aber der Browser an den JavaScript-Befehl kommt, der im <head> steht, wird der <head> implizit geschlossen und der <body> implizit aufgemacht. Beim </head>-Tag wird zwar ein Fehler erzeugt, der Benutzer aber erfährt nichts davon. (Und der W3C-Validator meldet auch keinen Fehler, weil er keinen JavaScript-Parser besitzt.)Zitat von 321
So. Und wie macht man sowas mit CSS? Hier ist eine Möglichkeit. Dabei ist es ganz einfach:
Die gesamte Meldung wird in ein <div> mit class="holder" gepackt. Das, was zunächst ausgeblendet werden soll, wird in <a href="#more" class="hid" onclick="this.hideFocus=true" onblur="this.hideFocus=false"> und <em> gepackt, das "Mehr..." in ein <span> gepackt. Du kannst da den Quelltext anschauen, um zu sehen, wie das geht.
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)