Ich habe jQuery-Code, der gut läuft, wenn eine Ansicht gerendert wird. Ich möchte jedoch, dass derselbe Code ausgeführt wird, nachdem eine Ajax-Anforderung erfolgreich ausgeführt wurde. Die jQuery wurde ursprünglich ausgeführt, als das Dokument fertig war, aber ich habe es in seine eigene Funktion verschoben, damit es aufgerufen werden kann. Die Funktion fügt einigen Beschriftungselementen einige einfache Klassen hinzu. Hier ist, was ich bisher habe:
%Vor%Dies wird nach einer einfachen Ajax-Anfrage nicht korrekt ausgeführt:
%Vor% Eine Teilansicht wird problemlos zurückgegeben, aber afterLoad()
wird ausgeführt, bevor sich die Teilansicht im DOM befindet. Wenn ich den gleichen Aufruf erneut ausführen würde, wird afterLoad()
ausgeführt (in der vorherigen Teilansicht), wird dann jedoch von der neuen Teilansicht überschrieben.
Irgendwelche Gedanken? Ein anderer Ansatz dazu wäre in Ordnung, ich suche nach einer Datei, um die .js-Datei auf Site-Ebene nach einer Ajax-Anforderung für eine Teilansicht auszuführen. Die Masterseite lädt die Datei site.js, und ich möchte ihren Code ausführen, ohne die Datei neu zu laden (da sie bereits vom Browser geladen wurde). Außerdem möchte ich Entwickler nicht zwingen müssen, etwas anderes mit ihren Ajax-Aufrufen zu tun, so dass es mit einem einfachen .load()
usw. arbeiten muss.
Das ist, was ich für das benutze, was du versuchst zu tun:
Sie haben auch Zugriff auf das XHR-Objekt, wenn Sie darauf zugreifen müssen.
%Vor%BEARBEITEN: Das ist die Struktur, die ich habe, die für mich funktioniert hat.
site.js
%Vor%Erstellt eine schnelle Geige . meinst du das?
Zwei bearbeiten:
Sie möchten vielleicht einen Listener im DOM für jedes <form>
Element haben, das dann erscheint, dann führen Sie Ihre afterLoad()
Funktion aus. Dies könnte ein Performance-Schwein sein, also würde ich es vorsichtig verwenden.
Ich benutze livequery , um dies zu tun
%Vor%Sie können globale AJAX-Standardeinstellungen in jQuery
festlegengefällt das
%Vor%Damit wird Ihre Methode ausgeführt, wenn ajaxCompleted
istWenn ich Ihre Frage richtig lese, besteht das Problem darin, dass Sie nach dem Ajax-Aufruf "afterLoad" ausgeben, aber bevor die Teilansichtselemente zum DOM hinzugefügt werden. In diesem Fall denke ich, dass Sie afterLoad als Teil der Ajax-Lade-Methode aufrufen müssen:
%Vor%Wenn ich nicht in der Basis bin, lass es mich wissen, happy coding!
Der Schuldige ist das
%Vor% load
verwendet intern $.get
, um die Daten abzurufen, und beim Aufruf des Erfolgshandlers wird die Methode afterLoad
aufgerufen, bevor die Daten selbst in das Element gesetzt werden. Möglicherweise müssen Sie mit einem anderen Ansatz gehen, der nicht funktioniert.
Versuchen Sie es
%Vor%Entfernen Sie den ajaxSetup-Teil.
%Vor% Und dann load
wie folgt verwenden:
Laut den Dokumenten sollte dies funktionieren.
Die obigen Antworten haben bei mir nicht funktioniert. Ich habe viel Zeit verschwendet, um es herauszufinden, alles umsonst. Endlich habe ich eine Lösung gefunden, die auf etwas ungewöhnliche Weise funktioniert. Hier ist es. Grundsätzlich erstelle ich die Event-Handler neu, nachdem ich die DOM-Elemente von AJAX angehängt habe
%Vor%