Я новичок в функциях ajax и обратного вызова, пожалуйста, простите меня, если я неправильно понял концепции.
Проблема: Могу ли я отправить функцию обратного вызова в качестве параметра другой функции, которая будет выполнять обратный вызов?
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);
}
javascript
ajax
callback
call
Ви Киат
источник
источник
Ответы:
Ага. Ссылки на функции такие же, как и ссылки на любые другие объекты, вы можете передавать их сколько угодно.
Вот более конкретный пример:
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
источник
->
значит в javascript? @ ничего-особенного-здесь->
это просто нормальная функция.var test = function(str, callback) { ajax call }
Вы можете использовать JavaScript CallBak следующим образом:
var a; function function1(callback) { console.log("First comeplete"); a = "Some value"; callback(); } function function2(){ console.log("Second comeplete:", a); } function1(function2);
Или обещание Java Script:
let promise = new Promise(function(resolve, reject) { // do function1 job let a = "Your assign value" resolve(a); }); promise.then( function(a) { // do function2 job with function1 return value; console.log("Second comeplete:", a); }, function(error) { console.log("Error found"); });
источник