Erst HTML laden, dann Javascript ausführen und anzeigen

F

freddie23

Hallo,

angenommen man hat eine normale HTML Seite mit Javascript Code innerhalb <body> welches aus einer entfernt liegenden PHP Datei Daten holt und anzeigt. Da kommts ja mal vor dass dieser Request ein bißchen länger dauert. Nun stoppt der Ladevorgang der HTML Seite bis Javasript die Daten anzeigen kann um dann wiederrum den Rest der HTML Seite anzuzeigen.
...
<p>TEXT</p>
<script>JS</script>
<p>TEXT</p>
<script>JS</script>
...

Gibt es eine Möglichkeit erst den ganzen HTML Teil zu laden und im Nachhinein erst den Javascript Teil? Das heisst also nach dem Laden von HTML wird onLoad ausgeführt, der die Daten (gleich vollständig in JavaScript geparst) von PHP holt und dann in die script-tags nachträglich lädt.

Grüße
 
Hi,

Ich kenne mich zwar nicht besonders mit JavaScript aus, aber wie wäre es, wenn du das Zeitgesteuert regelst? Das also erst nach 4 Sekunden das JavaScript ausgeführt wird?

gruß kevin
 
Kommt auch ganz darauf an mit welcher Methode du aus der PHP-Datei die Daten holst. Prinzipiell müsstest du das ganze nur in eine JS-Funktion packen und die onload ausführen.
 
Du kannst beim onload einen neuen <script>-Knoten mit der entsprechenden src ins Dokument einfügen.... das würde den Zweck erfüllen.

Beachte aber, dass dieses entfernte Script nach dem onLoad keine write()-Anweisung mehr ausführen darf.
 
con-f-use hat gesagt.:
Kommt auch ganz darauf an mit welcher Methode du aus der PHP-Datei die Daten holst. Prinzipiell müsstest du das ganze nur in eine JS-Funktion packen und die onload ausführen.

Also Momentan sieht der <script> Teil so aus, dass mit document.write() ein script tag geschrieben wird mit src="file.php".
Beispiel:

document.write(<script src=file.php></script>);

Die PHP Datei liefert gültiges Javascript der Form echo "document.write(Data)";.

Das zeitversetzte Ausführen ist keine gute Lösung, aber danke für den Vorschlag. Momentan ist es ja so, dass mit der onLoad Anweisung im <body> die Seite durch das document.write() neu beschrieben wird, d.h. der bereits geladene HTML Teil wird nur den in JS geschriebenen ersetzt.

Mit der Idee des if(loaded) hab ich auch schon gespielt. Nur gibt es da so eine Anweisung? Oder ist es eine Funktion im <head> Bereich?

Grüße
 
Hallo,
ich bin es nochmal. Nun habe ich das Wochenende damit verbracht weiter nach einer Lösung zu suchen. Und bin dabei auf das DOM gestoßen mit seinem document.createElement(). Ich habe es jetzt so eingebaut dass es mir meinen script-tag erzeugt und nun wollte ich es in einem definierten Platzhalter innerhalb des HTML Dokuments packen. Aber leider hält er auch hier wieder an bis der PHP Teil geparst wurde. Oder er setzt es komplett ans Ende. :confused:

Code:
function load_data() {
	
	if(document.createElement && document.childNodes) {
	
		var scriptElem01 = document.createElement('script');

		scriptElem01.setAttribute('language', 'JavaScript');
		scriptElem01.setAttribute('type', 'text/javascript');	
		scriptElem01.setAttribute('src', 'test.php');
                               
                 document.getElementById("p01").appendChild(scriptElem01);

	        }
}

Code:
<p id="p01"> </p>
<script language="JavaScript" type="text/javascript">
	load_data();
</script>

Grüße
 
Hast du meine Antwort eigentlich bemerkt?:confused:

Sven Mintel hat gesagt.:
Du kannst beim onload einen neuen <script>-Knoten mit der entsprechenden src ins Dokument einfügen.... das würde den Zweck erfüllen.

Beachte aber, dass dieses entfernte Script nach dem onLoad keine write()-Anweisung mehr ausführen darf.

.....ich hab es vielleicht etwas ungenau ausgedrückt:
wenn onload feuert, ist das Dokument geladen, dann darfst du keine write()-Anweisungen mehr geben.

Statt mit write() muss der Inhalt anders in das Dokument kommen.
Entweder auch mit dem von dir erwähnten "createElement()" etc.... oder über das innerHTML-Attribut.
 
Zurück