Как передать обратный вызов в качестве параметра в другую функцию - PullRequest
73 голосов
/ 24 июня 2011

Я новичок в функциях ajax и 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);
}

Ответы [ 5 ]

115 голосов
/ 24 июня 2011

Да.Ссылки на функции такие же, как и на любые другие ссылки на объекты, вы можете передать их по душе.

Вот более конкретный пример:

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!"

Вы также можете передать аргументы для 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"
12 голосов
/ 27 октября 2011

Кроме того, может быть просто как:

if( typeof foo == "function" )
    foo();
10 голосов
/ 24 июня 2011

Если вы Google для javascript callback function example, вы получите Лучшее понимание функций обратного вызова в JavaScript

Вот как сделать функцию обратного вызова:

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

function callFunction(func) {
    func();
}

callFunction(f);
2 голосов
/ 24 июня 2011

Да, конечно, функции являются объектами и могут быть переданы, но, конечно, вы должны объявить это:

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

Интересно то, что ваша функция обратного вызова также имеет доступ к каждой переменной, которую вы могли объявить внутри firstFunction () (переменные в javascript имеют локальную область видимости).

0 голосов
/ 05 декабря 2013

Пример для 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
...