Je suis novice dans les fonctions ajax et callback, veuillez me pardonner si les concepts sont erronés.
Problème: Pourrais-je envoyer un callbackfunction en tant que paramètre à une autre fonction qui exécutera le rappel?
function firstFunction(){
//some code
//a callback function is written for $.post() to execute
secondFunction("var1","var2",callbackfunction);
}
function secondFunction(var1, var2, callbackfunction) {
params={}
if (event != null) params = event + '&' + $(form).serialize();
// $.post() will execute the callback function
$.post(form.action,params, callbackfunction);
}
Ouaip. Les références de fonction sont comme n'importe quelle autre référence d'objet, vous pouvez les transmettre au contenu de votre coeur.
Voici un exemple plus concret:
function foo() {
console.log("Hello from foo!");
}
function caller(f) {
// Call the given function
f();
}
function indirectCaller(f) {
// Call `caller`, who will in turn call `f`
caller(f);
}
// Do it
indirectCaller(foo); // alerts "Hello from foo!"
Vous pouvez également passer des arguments pour foo
:
function foo(a, b) {
console.log(a + " + " + b + " = " + (a + b));
}
function caller(f, v1, v2) {
// Call the given function
f(v1, v2);
}
function indirectCaller(f, v1, v2) {
// Call `caller`, who will in turn call `f`
caller(f, v1, v2);
}
// Do it
indirectCaller(foo, 1, 2); // alerts "1 + 2 = 3"
Aussi, pourrait être simple comme:
if( typeof foo == "function" )
foo();
Si vous google pour javascript callback function example
vous obtiendrez mieux comprendre les fonctions de rappel en JavaScript
Voici comment faire une fonction de rappel:
function f() {
alert('f was called!');
}
function callFunction(func) {
func();
}
callFunction(f);
Oui, bien sûr, les fonctions sont des objets et peuvent être passées, mais vous devez bien sûr les déclarer:
function firstFunction(){
//some code
var callbackfunction = function(data){
//do something with the data returned from the ajax request
}
//a callback function is written for $.post() to execute
secondFunction("var1","var2",callbackfunction);
}
une chose intéressante est que votre fonction de rappel a également accès à toutes les variables que vous auriez pu déclarer dans firstFunction () (les variables en javascript ont une portée locale).
Exemple pour CoffeeScript
:
test = (str, callback) ->
data = "Input values"
$.ajax
type: "post"
url: "http://www.mydomain.com/ajaxscript"
data: data
success: callback
test (data, textStatus, xhr) ->
alert data + "\t" + textStatus