b-free
Goto Top

DOM tree wird nach AJAX nicht neu geladen bzw. innerHtml bleibt undefined...

Hallo Community,

ich bin ein JS/ AJAX Neuling. Mein AJAX lädt ein <script>...</script>, welches nach W3C Standard ja nicht ausgeführt wird. Die (vermeindliche) Lösung:
	alert (document.getElementById("display1"));           //output:  [object HTMLDivElement]  
	alert (document.getElementById("display1").innerHtml); //output:  undefined  (kein DOM update?)  
	var arr = document.getElementById("display1").getElementsByTagName('script');  
	alert (arr);                                           //output:  [object NodeList] (soweit korrekt, ist ja ein Array mit DOM nodes)
	alert (arr);                                        //output:  [object HTMLScriptElement] (Also doch ein DOM update, das <script> wurde erkannt)
	for (var n = 0; n < arr.length; n++)
		eval(arr[n].innerHTML)//run script inside div

Das <script> wird nicht ausgeführt....

Erst, wenn ich den selben Code in die Konsole eingebe, geht es...


Auch mit onload, delay etc... Es geht nicht...


Tschau
B-Free


PS: Ich habe es in mehreren Browsern getestet

Content-ID: 239717

Url: https://administrator.de/contentid/239717

Ausgedruckt am: 24.11.2024 um 17:11 Uhr

nxclass
nxclass 01.06.2014 aktualisiert um 23:25:08 Uhr
Goto Top
Hallo - kleiner Tipp: lade den JS code als zusätzlichen script Node in den header Node - das sollte funktionieren.

test.html
<!DOCTYPE html>
<html>
    <head>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
        <script type="text/javascript">  
document.include = function( src )
{
    e = document.createElement('script');  
    e.setAttribute('type', 'text/javascript');  
    e.setAttribute('src', src);  
    this.getElementsByTagName('head').item(0).appendChild(e);  
}
        </script>
    </head>
    <body>
        <input type="button" onclick="document.include('js/test.js');" name="load" value="load" />  
    </body>
</html>

test.js
alert('success');  
B-free
B-free 02.06.2014 um 12:34:57 Uhr
Goto Top
Ähm.... Okay.


Ich habe leider nicht verstanden (oder nur in den Grundzügen) was dein Vorschlag war.

Soll ich die <script> Tags aus dem AJAX request in den head schreiben?


Soweit
B-Free
nxclass
Lösung nxclass 02.06.2014, aktualisiert am 10.06.2014 um 17:59:06 Uhr
Goto Top
Soll ich die <script> Tags aus dem AJAX request in den head schreiben?
ja - beachte dass die script Tags innerhalb des body nur beim Laden der Webseite ausgeführt werden.

Weiterhin solltest Du versuchen dein JS so zu schreiben, dass es aus einer *.js Datei geladen werden kann - so kannst du den HTML und JS Code sauber trennen. Meistens sollte die gesamte JS Logik bereits geladen sein und nur HTML Fragmente werden per Ajax nachgeladen.
B-free
B-free 04.06.2014 um 08:05:42 Uhr
Goto Top
Weiterhin solltest Du versuchen dein JS so zu schreiben, dass es aus einer *.js Datei geladen werden kann - so kannst du den HTML
und JS Code sauber trennen. Meistens sollte die gesamte JS Logik bereits geladen sein und nur HTML Fragmente werden per Ajax
nachgeladen.

Danke!

Super! So werde ich das gleich mal testen. :D