2 Stimmen

Inline jQuery-Skript funktioniert nicht beim AJAX-Aufruf

Ich habe ein Problem:
während ich ein Inline-Skript (das auch jQuery verwendet) von einer anderen Seite mit Ajax aufrufe - scheint es, dass jQuery nicht mehr definiert ist (?), und ich kann keine der jQuery-Funktionen verwenden, die (laut Inline-Skript) auf den Inhalt angewendet werden sollten.

Es handelt sich im Grunde um eine Nachrichtenliste, die Links zu bestimmten Nachrichten enthält. Ich bevorzuge derzeit die Verwendung von Inline-Skript, da ich diese Funktion an anderer Stelle nicht benötige.

$.ajax({
 url: href,
 cache: false,
 success: function(html){
  $('#fancy_ajax').append($(html).find('.mainContentPadded'));
}
});

Wie Sie sehen können, rufe ich einfach einen Teil einer anderen Seite auf und füge dessen Inhalt an page an.

Wenn ich ganze Seite laden (nicht der Teil davon) - jQuery funktioniert wie erwartet (das ist, warum ich kam auf die Idee, dass es "rebinded" sein muss).

Ich danke Ihnen!

2voto

SBUJOLD Punkte 1455

Wenn ich Ihre Frage richtig verstehe, haben Sie also JavaScript in der html-Variable enthalten? Wenn ja, wird es nicht funktionieren, da JavaScript, das von einem AJAX-Hit abgerufen wird, aufgrund von Sicherheitsrisiken nicht vom Browser ausgeführt wird.

Ich empfehle Ihnen, den notwendigen Javascript-Code in die Seite einzubauen, die die Ajax-Anfrage auslöst, damit er bereits verfügbar ist, wenn Sie den neuen Inhalt anhängen.

*edit...

monksp fügte einen großartigen Link als Kommentar hinzu, der zeigt, wie man jQuery genau das tun lässt, was man will.

Hier ist auch etwas Code, um das Gleiche zu tun, aber manuell:

<html>
<head>
<title>Test JavaScript JSON</title>
</head>
<script src="https://www.google.com/jsapi"></script>
<script>
google.load('jquery', '1.3.2');
</script>
<body>
<script type="text/javascript">
    $(document).ready(function() {
        $.getJSON('testjs.json', function(json){
               $(document.body).append(json.html);
               eval(json.js);
             });
    });

</script>
</body>
</html>

Hier ist der Inhalt von testjs.json:

{"html":"<p class=\"newelement\">Click me</p>","js":"$(\".newelement\").click(function() { alert($(this).text()); });"}

Und schließlich gibt es eine ganze Reihe von Plugins und anderen Dingen, um Javascript dynamisch einzubinden. Ich habe in der Vergangenheit YUI Get verwendet: http://developer.yahoo.com/yui/3/get/

1voto

monksp Punkte 859

Die Frage verwirrt mich, glaube ich. Das bisschen Javascript, das du gepostet hast, wird das über Ajax in die Seite geladen? Das heißt, Sie laden die Seite in einem Browser, dann passiert etwas und das Javascript wird auf die Seite geladen? Das wird nicht funktionieren, weil jedes Javascript, das auf diese Weise geladen wird, nicht ausgeführt werden kann.

Ich würde empfehlen, es in das Javascript der Ausgangsseite zu laden, wenn möglich. Wenn nicht, könnten Sie die Ergebnisse der Ajax-Anfrage zu nehmen, und gehen Sie durch sie auf der Suche nach Skript-Tags, und eval() deren Inhalt als Teil Ihrer Erfolgsfunktion. Es ist nicht wirklich effizient (oder super sicher, stellen Sie sicher, dass Sie absolut vertrauen, wo die geladenen Inhalte kommt aus), aber es wird die Arbeit zu erledigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X