私は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);
}
うん。関数参照は他のオブジェクト参照とまったく同じであり、心のコンテンツに渡すことができます。
より具体的な例を次に示します。
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"
また、次のようにシンプルにすることもできます。
if( typeof foo == "function" )
foo();
javascript callback function example
を検索すると、 JavaScriptのコールバック関数の理解が深まります
これは、コールバック関数を実行する方法です。
function f() {
alert('f was called!');
}
function callFunction(func) {
func();
}
callFunction(f);
はい、もちろん、関数はオブジェクトであり、渡すことができますが、もちろん宣言する必要があります:
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の変数はローカルスコープを持っています)。
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