好吧,最近在學習前後端交互,然後就需要用到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);
});
});
在這個案例中,執行函數返回的值,作爲回調函數的的參數。