回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。 -《百度百科》
用我们的大白话讲就是,类A中有两个方法a1()和a2(),类B中有一个方法b()。a1()方法中调用了类B的b()方法,而类B的b()方法有调用了类A中的a2()方法。这就形成了一个回调机制:
a1():被称为注册回调函数;
a2():被称为回调函数
用过jquery的应该都用过ajax,异步的JavaScript和xml技术,是浏览器异步调用服务器的技术。我们先看一段代码:
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
这是一个典型的ajax技术,具体的原理步骤我就不细讲了,有兴趣的同学可以学习一下ajax。上段代码浏览器给some.php服务器发送信息data,而服务器接收了浏览器发送的请求,并处理了请求,如果服务器正确处理了请求,则会调用浏览器的success方法,而msg就是后端处理请求之后返回信息。这里的success就是回调函数,而浏览器用ajax技术请求服务器就是注册回调函数。
这里的success是jquery的方法,但是自身却不调用,自身也不知道什么时候调用,而是服务器端在正确处理请求之后调用的jquery的success方法。如果服务器没有正确的处理请求,发生错误,则会回调jquery的error方法。
所以对于jquery的success或者error方法的调用,不是拥有它的浏览器决定的,而是服务器决定的。现在总体再捋一遍。浏览器通过ajax请求服务器,服务器通过自己处理请求的结果返回来调用浏览器的success或error方法,这就是回调机制。