web-dev-qa-db-ja.com

別の関数にパラメーターとしてコールバックを渡す方法

私はajaxとコールバック関数が初めてなので、概念がすべて間違っている場合はご容赦ください。

問題: callbackfunctionを、コールバックを実行する別の関数のパラメーターとして送信できますか?

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

うん。関数参照は他のオブジェクト参照とまったく同じであり、心のコンテンツに渡すことができます。

より具体的な例を次に示します。

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

また、次のようにシンプルにすることもできます。

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

javascript callback function exampleを検索すると、 JavaScriptのコールバック関数の理解が深まります

これは、コールバック関数を実行する方法です。

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

function callFunction(func) {
    func();
}

callFunction(f);
10
ninjagecko

はい、もちろん、関数はオブジェクトであり、渡すことができますが、もちろん宣言する必要があります:

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の変数はローカルスコープを持っています)。

2

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