好吧,最近在学习前后端交互,然后就需要用到callback函数,callback是什么鬼~
好吧callback到达是什么呢
知呼上有个大神描述的很形象
你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做触发了回调关联的事件,店员给你打电话叫做调用回调函数,你到店里去取货叫做响应回调事件。
说说自己的遇到的问题,最近做的是学校详情的一个页面,需要通过<select>
来选择数据,再传递给后台,本来是一个简单的问题,通过 jq 的 change 事件,就能获得数据了。但是有点坑的就是,省份数据传输,在历届分数线的接口是以省份id的形式传参。而前端展现给用户的是省份名称,所以我在调用历届分数线接口的前,要先去调用省份接口,去获取省份id来作为历届分数的参数。
/*获得省份id并调用历届分数线接口*/
var getProvincesId = function (ass, callback) {
$.ajax({
url: pub+"getProvinces.jsonp?callback=?",
data:{ver:"1.0",
deviceNumber:"",
jsessionid:"",
channelId:"5",
platformId:"0",
data:""
},
dataType: "jsonp",
success: function(d) {
if (d.success) {
for(var i=0;i<d.data.length;i++){
if(d.data[i].name==ass){
add=d.data[i].id;
callback(add);
/*fun2(add);*/
}
}
} else {
$("#searchResult").html("出现错误:" + data.msg);
}
},
});
};
/*调用历届分数线*/
var getScore = function (year,add,art) {
$.ajax({
url: pub+"school/readScore.jsonp?callback=?",
data:{ver:"1.0",
deviceNumber:"",
jsessionid:"",
channelId:"5",
platformId:"0",
data:"{schoolHashId:\""+schoolid+"\",year:\""+year+"\",provinceId:\""+add+"\",subjectTypeId:\""+art+"\"}"
},
dataType: "jsonp",
success: function(d) {
/*alert("历届分数");*/
if (d.success) {
$('#avgScore').html(d.data.avgScore);
$('#minScore').html(d.data.minScore);
$('#controlLine').html(d.data.controlLine);
$('#batch').html(d.data.batch);
} else {
$("#searchResult").html("出现错误:" + data.msg);
}
},
});
};
var year=$("#year").find("option:selected").text();
var art=$("#art").find("option:selected").text();
var addr=$("#addr").find("option:selected").text();
getProvincesId(addr, function(id) {
getScore(year,id,art === "文科" ? 1: 0);
});
$(".select").change(function(res){
year=$("#year").find("option:selected").text();
art=$("#art").find("option:selected").text();
addr=$("#addr").find("option:selected").text();
getProvincesId(addr, function(id) {
getScore(year,id,art === "文科" ? 1: 0);
});
});
在这个案例中,执行函数返回的值,作为回调函数的的参数。