最近开发jQuery插件时用到了callback回调函数,$.post(url,paramet,function(data,status){})中是一种典型的通过回调函数来处理返回数据,大概很多人都不知道这里的返回的data数据和status返回状态到底是怎么来的吧,为了搞清楚怎么回事,在连续百度谷歌了将近10个小时之后我放弃了,实在是找不到这方面一个通俗易懂又简单的解释。于是自己试了很多次去模拟了一个类似$.post回调函数的数据获取的例子。
解开神秘面纱代码如下:
<script type="text/javascript">
//主函数,带有一个callback参数,名字可以自己定。
$.GoGoGo = function (callback) {
//函数体。
alert("GoGoGo正在执行");
//执行callback参数指向的函数,并给了两个参数10和success。
callback("10","success");
};
</script>
<script type="text/javascript">
//主函数的调用,带有一个回调函数作为参数,
//回调函数中的data,status也可以自己定义,只是顺序不变,跟post一样的,当然也可以不用这个参数。
$.GoGoGo(function (data, status) {
//使用回调函数的参数。
alert(status);
alert(data);
});
</script>
废话没有,先看效果:
代码看上去有一点绕,我自己也只能找个抽象的理解。
回调函数的执行命令以及回调函数的参数在主函数体中的,而回调函数的具体执行代码函数体则是在外面主函数体参数中传递进来的一个函数参数
看上去像是在回调函数在主函数体里面传递参数到外面的函数中,但是回调函数本身的执行代码缺又在外面传入的函数执行,
并且可以在外面传入函数时获取函数体中回调函数调用时传入的参数,看上去非常非常绕,看来只能意会,不可言传,
由于资料缺乏,各种困难,所以本文不保证正确性,如有什么错误地方,请高手指正。
这里说的有点绕,我通俗的补充一下,就用post来作解析:
首先,post函数定义了请求的地址,参数,还有一个回调函数。
而post的概念就是
“我执行的时候,需要你给我地址和参数,然后我执行完了,就完了,但是如果开发人员你,需要用到我返回的数据和状态,你要用,怎么办呢?
那没关系,不是还有一个回调函数吗?我再提供一个回调函数给你,至于你想怎么用,就用这个回调函数实现,于是我只把返回的数据,状态放在参数列表里面,并且下一个”执行“你外部函数的命令,
具体怎么实现,你要怎么用,是你开发人员的事了。”