Die Lösung ist, die Bindung von Variablen durch Schließung.
Als ein einfaches Beispiel, hier ist ein Beispiel Funktion, die eine Callback-Funktion, sowie ein Beispiel Callback-Funktion empfängt und ruft:
function callbackReceiver(callback) {
callback("Hello World");
}
function callback(value1, value2) {
console.log(value1, value2);
}
Dies ist die Rückrufe und liefert ein einziges Argument . Jetzt möchten Sie ein zusätzliches Argument angeben, damit Sie den Callback in den Abschluss bringen.
callbackReceiver(callback); // "Hello World", undefined
callbackReceiver(function(value) {
callback(value, "Foo Bar"); // "Hello World", "Foo Bar"
});
Oder einfacher ES6 Arrow Functions mit:
callbackReceiver(value => callback(value, "Foo Bar")); // "Hello World", "Foo Bar"
Wie für Ihr konkretes Beispiel, ich habe die .post
Funktion in jQuery nicht verwendet, sondern eine schnelle Prüfung der Dokumentation schlägt vor, die Rückruf sollte ein Funktionszeiger mit der folgenden Signatur sein:
function callBack(data, textStatus, jqXHR) {};
Deshalb denke ich, die Lösung wie folgt:
var doSomething = function(extraStuff) {
return function(data, textStatus, jqXHR) {
// do something with extraStuff
};
};
var clicked = function() {
var extraStuff = {
myParam1: 'foo',
myParam2: 'bar'
}; // an object/whatever extra params you wish to pass.
$.post("someurl.php", someData, doSomething(extraStuff), "json");
};
Was geschieht?
In der letzten Zeile ist doSomething(extraStuff)
aufgerufen und das Ergebnis dieses Aufrufs ist ein Funktionszeiger.
Da extraStuff
als Argument an doSomething
übergeben wird, liegt es im Bereich der doSomething
-Funktion.
Wenn extraStuff
in der zurückgegebenen anonymen inneren Funktion von doSomething
referenziert wird, wird es durch Schließen an das äußere Argument extraStuff
der äußeren Funktion gebunden. Dies gilt auch, nachdem doSomething
zurückgegeben wurde.
Ich habe die oben genannten nicht getestet, aber ich habe sehr ähnlichen Code in den letzten 24 Stunden geschrieben und es funktioniert wie ich beschrieben habe.
Sie können natürlich mehrere Variablen statt eines einzelnen 'extraStuff'-Objekts übergeben, abhängig von Ihren persönlichen Vorlieben/Codierungsstandards.
Es ist erwähnenswert, dass jQuery.ajax() hat eine Kontexteinstellung seit ver 1.4 (http://jquery14.com/day-01/jquery-14) finden Sie ein Beispiel für seine Verwendung hier: http: // stackoverflow .com/questions/5097191/ajax-context-option/5097214 # 5097214 – russau
Ich habe mein Problem mit der Rückgabe der Daten nach AJAX behoben und dann mache ich etwas. – Onaiggac