So rufen Sie eine jQuery-Funktion nach JEDER erfolgreichen Ajax-Anforderung mit MVC-Teilansichten auf

8

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.

    
Brandon 11.08.2011, 18:21
quelle

7 Antworten

16

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%     
Amin Eshaq 11.08.2011, 18:27
quelle
4

Sie können globale AJAX-Standardeinstellungen in jQuery

festlegen

gefällt das

%Vor%

Damit wird Ihre Methode ausgeführt, wenn ajaxCompleted

ist     
Senad Meškin 11.08.2011 18:25
quelle
1

Das funktioniert gut für mich:

%Vor%     
Mike 17.12.2015 13:32
quelle
0

Wenn 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!

    
Justin Beckwith 11.08.2011 18:27
quelle
0

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%     
ShankarSangoli 11.08.2011 18:40
quelle
0

Entfernen Sie den ajaxSetup-Teil.

%Vor%

Und dann load wie folgt verwenden:

%Vor%

Laut den Dokumenten sollte dies funktionieren.

    
Mrchief 11.08.2011 18:39
quelle
0

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%     
manwhowillsoldtheworld 03.06.2013 22:04
quelle

Tags und Links