Es gibt eine Div namens "Content":
<div id="content"></div>
Es sollte mit Daten aus einer PHP-Datei von AJAX gefüllt sein, einschließlich eines <script>
Tags. Das Skript in diesem Tag wird jedoch nicht ausgeführt.
<div id="content"><!-- After AJAX loads the stuff that goes here -->
<script type="text/javascript">
//code
</script>
<!-- More stuff that DOES work here -->
</div>
javascript
html
ajax
JCOC611
quelle
quelle
window.onload
ich einXMTHttpRequest
Objekt erstellt habe, um eine andere (PHP-) Seite anzufordern, die den Inhalt des Div enthält, einschließlich eines Skripts. Ich mache das mit einfachem JS, keine Bibliotheken (außer meinem eigenen lol)Antworten:
Als DOM-Text eingefügtes JavaScript wird nicht ausgeführt. Sie können jedoch das dynamische Skriptmuster verwenden , um Ihr Ziel zu erreichen. Die Grundidee besteht darin, das Skript, das Sie ausführen möchten, in eine externe Datei zu verschieben und ein Skript-Tag zu erstellen, wenn Sie Ihre Ajax-Antwort erhalten. Anschließend legen Sie das
src
Attribut Ihres Skript-Tags fest und voila lädt das externe Skript und führt es aus.Dieser andere StackOverflow-Beitrag kann auch für Sie hilfreich sein: Können Skripte mit innerHTML eingefügt werden? .
quelle
$('#audit-view script').each(function (index, element) { eval(element.innerHTML); })
Ich habe diesen Code verwendet, er funktioniert einwandfrei
quelle
Wenn Sie einen Skriptblock in Ihr div über Ajax wie folgt laden:
... es aktualisiert einfach das DOM Ihrer Seite, myFunction () wird nicht unbedingt aufgerufen.
Sie können eine Ajax-Rückrufmethode wie die in der ajax () -Methode von jQuery verwenden, um zu definieren, was ausgeführt werden soll, wenn die Anforderung abgeschlossen ist.
Was Sie tun, unterscheidet sich vom Laden einer Seite mit JavaScript von Anfang an (das ausgeführt wird).
Ein Beispiel für die Verwendung des Erfolgs- und Fehlerrückrufs nach dem Abrufen von Inhalten:
Eine andere schnelle und schmutzige Möglichkeit besteht darin, mit eval () Skriptcode auszuführen, den Sie als DOM-Text eingefügt haben, wenn Sie jQuery oder eine andere Bibliothek nicht verwenden möchten.
quelle
Hier ist das Skript, das alle Skript-Tags im Text auswertet.
Rufen Sie diese Funktion einfach auf, nachdem Sie Ihren HTML-Code vom Server erhalten haben. Seien Sie gewarnt: mit
eval
kann gefährlich sein.Demo: http://plnkr.co/edit/LA7OPkRfAtgOhwcAnLrl?p=preview
quelle
Dies funktioniert bei mir mit jQuery, sofern Sie nicht versuchen, eine Teilmenge des von XHR zurückgegebenen HTML-Codes an das Dokument anzuhängen. (Siehe diesen Fehlerbericht, der das Problem mit jQuery zeigt.)
Hier ist ein Beispiel, das zeigt, wie es funktioniert:
Hier ist das Äquivalent zu den oben genannten: http://jsfiddle.net/2CTLH/
quelle
Hier ist eine Funktion, mit der Sie AJAX-Antworten analysieren können, insbesondere wenn Sie minifiedjs verwenden und das zurückgegebene Javascript ausführen möchten oder nur die Skripte analysieren möchten, ohne sie dem DOM hinzuzufügen. Sie behandelt auch Ausnahmefehler. Ich habe diesen Code in der php4sack-Bibliothek verwendet und er ist außerhalb der Bibliothek nützlich.
quelle
Wenn Sie etwas einfügen, für das das Skript-Tag erforderlich ist, wird möglicherweise ein nicht erfasster Syntaxfehler angezeigt, und es wird ein unzulässiges Token angezeigt . Um dies zu vermeiden, müssen Sie die Schrägstriche in Ihren schließenden Skript-Tags vermeiden. dh;
Gleiches gilt für alle schließenden Tags, z. B. ein Formular-Tag.
quelle
Ich hatte hier einen ähnlichen Beitrag, addEventListener load on ajax load WITHOUT jquery
Wie ich es gelöst habe, war das Einfügen von Aufrufen von Funktionen in meine stateChange-Funktion. Die Seite, die ich eingerichtet hatte, bestand aus 3 Schaltflächen, mit denen 3 verschiedene Seiten in die contentArea geladen wurden. Da ich wissen musste, welche Schaltfläche gedrückt wurde, um Seite 1, 2 oder 3 zu laden, konnte ich leicht if / else-Anweisungen verwenden, um zu bestimmen, welche Seite geladen wird und welche Funktion dann ausgeführt werden soll. Ich habe versucht, verschiedene Button-Listener zu registrieren, die nur funktionieren würden, wenn die bestimmte Seite aufgrund von Element-IDs geladen wurde.
so...
Wenn (Seite1 geladen wird, pageload = 1), führen Sie die Funktion registerListeners1 aus
dann das gleiche für Seite 2 oder 3.
quelle
Dies funktionierte für mich, indem eval für jeden Skriptinhalt von ajax .done aufgerufen wurde:
quelle
Mein Fazit ist, dass HTML keine NESTED SCRIPT-Tags zulässt. Wenn Sie Javascript zum Einfügen von HTML-Code verwenden, der Skript-Tags enthält, funktioniert dies nicht, da das Javascript auch in einem Skript-Tag enthalten ist. Sie können es mit dem nächsten Code testen und Sie werden feststellen, dass es nicht funktionieren wird. Der Anwendungsfall ist, dass Sie einen Dienst mit AJAX oder ähnlichem aufrufen, HTML erhalten und es direkt in das HTML-DOM einfügen möchten. Wenn der injizierte HTML-Code in SCRIPT-Tags enthalten ist, funktioniert dies nicht.
quelle
Sie können die Seite auch mit einem Skript wie dem folgenden laden:
Dadurch wird die Seite geladen, das Skript ausgeführt und der Ereignishandler entfernt, wenn die Funktion ausgeführt wurde. Dies wird nicht sofort nach dem Laden von Ajax ausgeführt. Wenn Sie jedoch darauf warten, dass der Benutzer das div-Element eingibt, funktioniert dies einwandfrei.
PS. Benötigt Jquery
quelle