Jestem nowy w funkcjach AJAX i wywołań zwrotnych, wybacz mi, jeśli wszystkie koncepcje są złe.
Problem: Czy mogę wysłać funkcję wywołania zwrotnego jako parametr do innej funkcji, która wykona wywołanie zwrotne?
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
Wee Kiat
źródło
źródło
Odpowiedzi:
Tak. Odwołania do funkcji są takie same, jak w przypadku innych odniesień do obiektów, możesz je przekazać do treści swojego serca.
Oto bardziej konkretny przykład:
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!"
Możesz również przekazać argumenty dla
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"
źródło
Może być również proste, jak:
if( typeof foo == "function" ) foo();
źródło
Jeśli wygooglujesz
javascript callback function example
, uzyskasz lepsze zrozumienie funkcji wywołania zwrotnego w JavaScriptOto jak wykonać funkcję zwrotną:
function f() { alert('f was called!'); } function callFunction(func) { func(); } callFunction(f);
źródło
Tak, oczywiście, funkcje są obiektami i można je przekazać, ale oczywiście musisz to zadeklarować:
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); }
interesującą rzeczą jest to, że funkcja wywołania zwrotnego ma również dostęp do każdej zmiennej, którą mogłeś zadeklarować w firstFunction () (zmienne w javascript mają zasięg lokalny).
źródło
Przykład dla
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
źródło
->
oznacza w javascript? @ nic-special-here->
jest po prostu normalną funkcją.var test = function(str, callback) { ajax call }
Możesz użyć JavaScript CallBak w ten sposób:
var a; function function1(callback) { console.log("First comeplete"); a = "Some value"; callback(); } function function2(){ console.log("Second comeplete:", a); } function1(function2);
Lub obietnica skryptu Java:
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"); });
źródło