2009-11-25 18 views
8

Ich habe ein div-Tag, das über einen Ajax-Aufruf mit Skript gefüllt wird, aber das Skript wird nicht ausgeführt.Skript-Tags über AJAX laden

Gibt es eine Möglichkeit, das Skript auszuführen?

+0

dort Verwendung mit DOM-Funktionen zu schreiben, ist jeder Code auf diese Frage verwandten verfügbar? – miku

+0

sehr vage Frage. Code und Beispiele bitte. – mauris

+0

- in der div-Tag-Client-Seite abgelegt. –

Antwort

11

Wenn Sie jQuery .html Methode den Script-Tag analysiert und evals es:

$("div").html('<script type="text/javascript">alert("This should work")</script>'); 

Wenn jQuery keine Option ist, dass Sie diese Texte selbst entweder mit schreiben konnte (1) einen regulären Ausdruck oder (2) analysiere den DOM-Baum und finde Skript-Tags. (# 2 ist, wie jQuery es tut)

+0

jQuery muss jedoch ausgelöst werden, und wenn ich dies in die Payload aufgenommen habe, die zurück an den Client gesendet wird, wird es nicht ausgeführt, da das heruntergeladene ajax-Skript nicht gestartet wird. Ausnahme: Ich kann das Defer-Tag im Skript-Markup setzen und IE wird es ausführen, aber das sind nur x% der Benutzer. –

+0

@Caleb: Was macht der Code in Ihrer Antwort? – Ashwin

+0

Dies ist auch der Grund, warum Skript-Tags in AJAX-Anfragen nicht an der Stelle landen, an der sie sich in der Antwort befinden. – Ikke

0

Wenn Sie innerHtml von div festlegen, sollten die Skript-Tags ausgeführt werden. Ich benutze $ ("# divid"). Load() um dynamische Inhalte zu laden und Script-Tags auszuführen.

Versuchen Sie, JQuery zu verwenden, wenn es nicht mit plain javascript funktioniert.

+0

Leider ist das nicht der Fall. Ein Skript in der HTML-Nutzlast einer von Ajax gelieferten Nutzlast an den Client wird nicht ausgeführt. –

3

Es ist immer eine gute Idee, Inhalt vom Code zu trennen. Laden Sie Inhalte über AJAX und Code, indem Sie <script> Tags einfügen. Wenn Sie jQuery verwenden, verwenden Sie $.getScript(), um Skripts dynamisch zu laden.

2

Ich denke, Sie schreiben Script-Tag in innerHTML- direkt

Das wird nicht funktionieren.

document.body.innerHTML+="<script>alert(1)</scr"+"ipt>"; 

Sie haben ähnliche

var tag = document.createElement("script"); 
tag.innerHTML="alert(1)"; 
document.body.appendChild(tag); //can be append to any object other than body 

or Better jQuery

+0

Das Problem besteht darin, dass das Skript in der Ajax-Nutzlast enthalten ist und an den Client innerhalb des DIV gesendet wird. Ich kann kein Skript zum Starten bekommen, sobald es beim Kunden ankommt, also gibt es ein Hühner- und Ei-Problem. –

+0

Hallo, in Ajax zurück, was für ein Ergebnis? nur JavaScript-Codes? oder ein Skript-Tag einschließen? Wenn nur JavaScript-Codes, können Sie "eval" oder wenn Skript-Tag enthalten, können Sie oben genannten Beispiel in meinem Beitrag und ändern Sie "document.body" mit Ihrem div-Tag, und dort anhängen. – YOU

+0

und könnten Sie Ihren Post mit mehr Informationen aktualisieren, wie Ihre Website und weitere Erklärungen? weil die Leute bemerken werden und sie auch Ihr aktuelles Problem herausfinden können, rgds – YOU