字面上理解下来就是,回调就是一个函数的调用过程。那么就从理解这个调用过程开始吧。函数a有一个参数,这个参数是个函数b,当函数a执行完以后执行函数b。那么这个过程就叫回调。

其实中文也很好理解:回调,回调,就是回头调用的意思。函数a的事先干完,回头再调用函数b。

这里必须清楚一点:函数b是你以参数形式传给函数a的,那么函数b就叫回调函数。

也许有人有疑问了:一定要以参数形式传过去吗,我不可以直接在函数a里面调用函数b吗?确实可以。求解中。

<解惑:如果你直接在函数a里调用的话,那么这个回调函数就被限制死了。但是使用函数做参数就有下面的好处:当你a(b)的时候函数b就成了回调函数,而你还可以a(c)这个时候,函数c就成了回调函数。如果你写成了function a(){…;b();}就失去了变量的灵活性。>

下面用代码来证实我的理解。

  • <html>
  • <head>
  • <title>回调函数(callback)</title>
  • <script language=”javascript” type=”text/javascript”>
  • function a(callback)
  • {
  •     alert(“我是parent函数a!”);
  •     alert(“调用回调函数”);
  •     callback();
  • }
  • function b(){
  • alert(“我是回调函数b”);
  • }
  • function c(){
  • alert(“我是回调函数c”);
  • }
  • function test()
  • {
  •     a(b);
  •    a(c);
  • }
  • </script>
  • </head>
  • <body>
  • <h1>学习js回调函数</h1>
  • <button onClick=test()>click me</button>
  • <p>应该能看到调用了两个回调函数</p>
  • </body>
  • </html>

转自:http://www.cnblogs.com/yhql/archive/2011/08/08/2131420.html

以上的例子简单易懂,但是对比下面的,我就有点糊涂了,可能是我这水平还看不懂吧,是不是那个option啊

今天想用js调取一个接口,可总不知道如何获取返回值,只能怪自己思维打盹了,其实返回值中是个函数回调,在调用页定义这个函数就可以了,例子如下:

<script     src=”http://blogpagin.sinajs.cn/article?1315019920&0&requestId=scriptId_0.37” ></script>

趁热打铁,看了下公司牛人写的js代码,温习下他们是如何这类问题的

<SCRIPT LANGUAGE=”JavaScript”>

window.$ScriptLoader = {

requestTable : {},

request : function (url, option){
option = option || {};
option.charset = option.charset || “utf-8″;

var id = “scriptId_” + Math.random();
url = url + “&id=” + id ;

this.requestTable[id] = {
id : id,
url : url,
option : option
};
var sTag = document.createElement(“script”);
sTag.id = id;
sTag.src = url;
sTag.charset = option.charset;

document.body.appendChild(sTag);
},
response : function (id, txt){

var entity = this.requestTable[id];
if (entity){
try {
entity.option.onComplete(txt );
} catch (err) {
var oe = entity.option.onException;
try {
if(oe)
oe(txt,    err);
else {
alert(“error occurs while calling onComplete to url : ” + this.requestTable[id].url + ” Error : ” + err);
}
} catch (err) {}
} finally {

}
}
}
}

</SCRIPT>

<body>

<SCRIPT LANGUAGE=”JavaScript”>
function fun( str)
{
alert(str);
}

function errfun()
{
alert(“error”);
}

var url = “http://www.test.com/cms/test.php?quest=” ;
var option = {onComplete:fun,onException:errfun};
window.$ScriptLoader.request(url,option);

</SCRIPT>

</body>

 

原理就是动态加载一个js文件,注意js文件的编码,然后预设一个回调函数,回调函数的触发点就是onComplete时间,这也是ajax的原型

看看test.php服务器端的代码:

<?php
echo “window.\$ScriptLoader.response(‘” . $_GET[id] . “‘,’ttt’);”;
?>

 

转自:http://hi.baidu.com/ywdblog/item/d95878eb6ec891e3fa42bae4

 Leave a Reply

(required)

(required)

* Copy This Password *

* Type Or Paste Password Here *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

   
© 2012 Hedgehog Suffusion theme by Sayontan Sinha