90 votes

Comment passer une callback comme paramètre dans une autre fonction ?

Je suis novice en matière d'ajax et de fonctions de rappel, veuillez me pardonner si j'ai mal compris les concepts.

Problème : Pourrais-je envoyer un Fonction de rappel comme paramètre d'une autre fonction qui exécutera le callback ?

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);
}

0 votes

137voto

T.J. Crowder Points 285826

Yup. Les références de fonction sont comme n'importe quelle autre référence d'objet, vous pouvez les faire circuler comme bon vous semble.

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); // logs "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); // logs "1 + 2 = 3"

13voto

Brad Points 131

Aussi, ça pourrait être simple comme :

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

11voto

ninjagecko Points 25709

Si vous cherchez sur Google javascript callback function example vous obtiendrez Mieux comprendre les fonctions de rappel (callback) en JavaScript

Voici comment faire une fonction de rappel :

function f() {
    alert('f was called!');
}

function callFunction(func) {
    func();
}

callFunction(f);

2voto

Nicola Peluchetti Points 38948

Oui, bien sûr, les fonctions sont des objets et peuvent être transmises, mais il faut 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 avez pu déclarer dans firstFunction() (les variables en javascript ont une portée locale).

0voto

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 votes

Que fait -> signifie en javascript ?rien-de-spécial-ici

0 votes

-> est juste une fonction normale. var test = function(str, callback) { ajax call }

0 votes

@shenkwen Une flèche fine -> est une syntaxe CoffeeScript, pas JavaScript, et signifie simplement une fonction JavaScript normale lorsqu'elle est compilée en JavaScript. JavaScript possède une fonction flèche similaire w3schools.com/Js/js_arrow_function.asp

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X