Javascript: appendChild()
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
angegebenen funktion
asynchrone aufrufe
aufruf
code
eigenschaft
element
empfangenen text
folgendes problem
funktion
funktionieren
header
parameter
post
problem
reihenfolge
sagen
stand
vorteil
-
Moin, folgendes Problem:
function NewWindow(WindowContent, Options) { var NewWindow = document.createElement(\"DIV\"); NewWindow.id = WindowContent + \"_\" + WindowId; NewWindow.setAttribute(\'class\',\'Window\'); var NewHeader = document.createElement(\"DIV\"); NewHeader.id = WindowContent + \"_header_\" + WindowId; NewHeader.setAttribute(\'class\',\'Header\'); var NewContent = document.createElement(\"DIV\"); NewContent.id = WindowContent + \"_content_\"+WindowId; var NewWindowContent = \"./inc/\" + WindowContent + \".php\" new Ajax.Request( \'load.php\', { method: \'post\', parameters: \'content=\' + NewWindowContent , onComplete: function(response){ NewWindow.innerHTML = response.responseText; } } ); $(\'main_window\').appendChild(NewWindow); $(WindowContent + \"_\" + WindowId).appendChild(NewHeader); }
Klingt logisch, finde ich. Nur der zweite appendChild läuft irgendwie nicht. Kann mir wer sagen, warum?
Beitrag geändert: 20.7.2008 0:41:28 von nerdinator -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das Problem ist anscheinend, dass Ajax ein asynchroner Aufruf ist. D.h. die Ajax Funktion wird angestupst, die Funktion wird weiter ausgeführt, und wenn er fertig ist, springt er zur im onComplete-Parameter angegebenen Funktion. Das ist ja gerade der Vorteil von Ajax - dass es asynchrone Aufrufe sind.
Es passiert bei dir also folgendes:
-> Er erstellt das Div-Element NewWindow
-> Er erstellt das Div-Element NewHeader
-> Er erstellt das Div-Element NewContent
-> Er stößt das Ajax-Request asynchron an (Die Fkt. in onComplete wird noch nicht ausgeführt)
-> Er fügt zu \'main_window\' das Div-Element NewWindow hinzu
-> Er fügt zum newWindow-Div das Element NewHeader hinzu
-> Er ist fertig mit der Funktion - wenig später ist das Ajax-Request fertig und er führt die onComplete:function aus:
-> Er setzt die innerHTML-Eigenschaft auf den empfangenen Text und überschreibt damit alles, was in dem Div-Element stand, inklusivce dem angehängten Div-Element newHeader.
Deshalb scheint es so, als hätte er gar nicht erst das Element angehängt. -
Ah, also liegt das Problem einfach nur in der Reihenfolge...
function NewWindow(WindowContent, Options) { var NewWindow = document.createElement(\"DIV\"); NewWindow.id = WindowContent + \"_\" + WindowId; NewWindow.setAttribute(\'class\',\'Window\'); var NewHeader = document.createElement(\"DIV\"); NewHeader.id = WindowContent + \"_header_\" + WindowId; NewHeader.setAttribute(\'class\',\'Header\'); $(\'main_window\').appendChild(NewWindow); $(WindowContent + \"_\" + WindowId).appendChild(NewHeader); var NewContent = document.createElement(\"DIV\"); NewContent.id = WindowContent + \"_content_\"+WindowId; var NewWindowContent = \"./inc/\" + WindowContent + \".php\" new Ajax.Request( \'load.php\', { method: \'post\', parameters: \'content=\' + NewWindowContent , onComplete: function(response){ NewWindow.innerHTML += response.responseText; } } ); }
Scheint zu funktionieren. Schankedön :)
Beitrag geändert: 20.7.2008 0:54:07 von nerdinator
Beitrag geändert: 20.7.2008 0:56:16 von nerdinator -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage