要等待异步请求结果并使用时,比如我们直接返回异步请求(常见延时任务,ajax请求等)的数据时,并不能得到想要的数据。
function getJson() {
$.ajax({
url: "./json数据/aa.json",
type: 'get',
dataType: 'json',
success: function (data) {
console.log(data)
return data
},
error: function (data) {
console.log(data)
}
})
}
console.log(getJson())
请求到了数据,但不能返回,这是因为函数结束了,请求还没结束
这种情况可以把异步改成同步,或者成功后调用函数可以实现功能,但这就违背了初衷了,没法封装了,这里就用到了回调函数,回调函数就是把函数当做参数传到方法里,达到封装的目的
function getJson(callBackFunc) {
$.ajax({
url: "./json数据/aa.json",
type: 'get',
dataType: 'json',
success: function (data) {
callBackFunc(data)
},
error: function (data) {
console.log(data)
}
})
}
function callBack(data) {
console.log("得到了json" + data.name)
}
//这样
getJson(callBack)
//这样
getJson(function (data) {
console.log("这里得到了" + data.name)
})
//还有这样
getJson(data => {
console.log("这里也得到了" + data.name)
})