2016-06-05 11 views
0

Also habe ich mehrere divs, wo die AJAX-Inhalte gepostet werden. Die ajaxComplete wird auf allen AJAX-Vervollständigungen durchgeführt, aber ich würde gerne wissen, welche der Container mit dem neuen AJAX-Inhalt geladen sind. Ich benutze das, aber es funktioniert nicht.Welcher Container von der AjaxComplete betroffen ist

Was ist der beste Weg zu wissen, welche Container neu mit AJAX-Ergebnissen geladen werden.

+0

Gut für den Anfang, 'responseText' ist, gut , ** Text ** (ein String). Strings haben keine "Eltern" -Methode. –

+0

Wie werden die Ereignisse ausgelöst? Sie sollten in der Event-Listener-Funktion "this" verwenden können. – David

Antwort

0

ich mehrere divs haben, wo die AJAX Inhalte gepostet werden ...

Ajax Lasten etwas von dem Server, ist es nicht alles überall posten. Der ajaxComplete Aufruf wird nicht spezifisch für irgendeinen Container sein div weil, nun, es gibt keine.

Wenn Sie die load method verwenden, die ein verkürztes Verfahren, die einen Ajax-Aufruf tut und dann legt das Ergebnis in einem bestimmten Behälter, die Informationen darüber, welche Container sie es ausdrückt in an ajaxComplete nicht weitergegeben (at mindestens, nicht nach the documentation). Sie müssen diese load Anrufe in separate ajax und text/html Anrufe (siehe Details in der load Dokumentation) und etwas von Ihrer eigenen konvertieren entlang dieser Informationen oder schreiben Sie Ihre eigenen Wrapper für load passieren die load ‚s verwendet vollständiger Handler, um diese Informationen weiterzugeben.

Re Ihr Kommentar:

ist es wie ein General über Hörer wölbt, dass alle Lasten erfassen wird und geladen wurden, welche der Behälter herausfinden?

Nicht, dass ich weiß. Sie könnten Ihre eigene spezielle load Funktion erstellen und hat ein benutzerdefiniertes Ereignis ausgelöst, behandelt dann das benutzerdefinierte Ereignis am document Ebene:

unsere eigene „load mit Ereignisse“ Add-Funktion (einmal):

jQuery.fn.loadWithEvent = function() { 
    var t = this; 
    t.load.apply(t, arguments).then(function() { 
     t.trigger(jQuery.Event("ajaxload")); 
    }); 
}; 

einen allgemeinen Handler für dieses Ereignis hinzufügen (einmal):

$(document).on("ajaxload", function(e) { 
    // Here, e.target is the element it was fired on 
    console.log("got it on document", e.target); 
}); 

es verwenden (so oft wie nötig):

$("#target").loadWithEvent("/some/url"); 

Wenn Sie ES2015 verwenden (auch bekannt als "ES6"), die loadWithEvent Funktion kann ein wenig einfacher sein:

jQuery.fn.loadWithEvent = function(...args) { 
    this.load(...args).then(() => { 
     this.trigger(jQuery.Event("ajaxload")); 
    }); 
}; 
+0

Ich verwende die load-Methode. Gibt es einen allgemeinen überbogenden Listener, der alle Lasten erfasst und herausfindet, welche der Container geladen wurden?Annahme von Rückrufen bei den auslösenden Ladeverfahren. Ich habe im Internet gesucht und dieses Thema wurde nicht viel diskutiert. – jfet93

+0

@ jfet93: Nicht, dass ich weiß. Ich habe der Antwort eine Notiz hinzugefügt, wie Sie damit umgehen könnten. –

Verwandte Themen