JavaScript-Code Ich beginne mit:
function doSomething(url) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: rssToTarget
});
}
Muster, das ich verwenden möchte:
//where elem is the target that should receive new items via DOM (appendChild)
function doSomething(url, elem) {
$.ajax({
type: "GET",
url: url,
dataType: "xml",
success: rssToTarget(elem)
});
}
Ich glaube nicht, dass ich den Rückruf so zum Laufen bringen kann, oder? Was ist das richtige Muster? Ich möchte nicht unbedingt globale Variablen verwenden, um den elem
Namen oder elem vorübergehend zu speichern.
javascript
jquery
ajax
callback
BuddyJoe
quelle
quelle
rssToTarget
) in dersuccess
Eigenschaft des Objektliteral speichern, an das Sie übergeben$.ajax()
, damit jQuery diese Funktion aufrufen kann, sobald die AJAX-Anforderung abgeschlossen ist. Durch Hinzufügen(elem)
am Ende des Funktionsnamens wirdrssToTarget
der Rückgabewert fälschlicherweise aufgerufen und darin gespeichertsuccess
. In JS wird durch Hinzufügen von Klammern am Ende eines Funktionsnamens dieser aufgerufen.Antworten:
So was...
function doSomething(url, elem) { $.ajax({ type: "GET", url: url, dataType: "xml", success: function(xml) { rssToTarget(xml, elem); } }); }
Antwort auf Ihren Kommentar: Beeinträchtigt die Verwendung anonymer Funktionen die Leistung?
quelle
$.ajax
Aufruf in eine Schleife einschließen, erstellt dieser Ansatzfunction(xml) { ... }
für jede Schleife eine neue Funktion ( ), die mehr Speicherplatz beansprucht.Das Muster, das Sie verwenden möchten, könnte funktionieren, wenn Sie einen Abschluss in Ihrer rssToTarget-Funktion erstellen:
function rssToTarget(element) { return function (xmlData) { // work with element and the data returned from the server } } function doSomething(url, elem) { $.ajax({ type: "GET", url: url, dataType: "xml", success: rssToTarget(elem) }); }
Bei der
rssToTarget(elem)
Ausführung wird der Elementparameter im Abschluss gespeichert und die Rückruffunktion wird zurückgegeben, die darauf wartet, ausgeführt zu werden.quelle