web-dev-qa-db-fra.com

Comment passer un rappel en tant que paramètre dans une autre fonction

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);
}
73
Wee Kiat

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"
115
T.J. Crowder

Aussi, pourrait être simple comme:

if( typeof foo == "function" )
    foo();
12
Brad

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);
10
ninjagecko

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).

2
Nicola Peluchetti

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
0