现在更多的已经使用新的前端技术栈了,但是对于我这个陈年老后端来说,jquery还很勉强,所以.......
如果还是使用jquery来进行ajax调用的话,就一定会遇到ajax返回值的问题.
我们在写代码的时候一般会这么写一个ajax方法:
function getInfo(id) {
if(id == 0 || id == undefined) {
return false
}
$.ajax({
type: "get",
url: "xxx",
success: function (res) {
if(res.errNo == 0) {
return res.data;
//类似这样的写法.是有问题无法返回的.因为是异步请求.
}
},
});
}
那把上面的代码改一改应该就可以了,网上搜罗一大堆博客,会告诉你应该这么搞:
function getInfo(id) {
var response = "";
if(id == 0 || id == undefined) {
return false
}
$.ajax({
type: "get",
url: "xxx",
async: false,
//当然要加上这么一行,这个意思是让这个请求同步执行.
//大体上是说要等这个ajax都执行完了,再让当前方法返回.
//这样是能够拿到返回值的.
success: function (res) {
if(res.errNo == 0) {
//return res.data;
response = res.data;
}
},
});
return response;
}
但是有那么点小问题,为啥要加上同步的返回才能走的通.
我们是不是应该思考一下比较好的实践是什么样子的??
function getInfo(id,callback) {
if(id == 0 || id == undefined) {
return false
}
$.ajax({
type: "get",
url: "xxx",
success: function (res) {
if(res.errNo == 0) {
callback(data);//这样是不是更加优雅一点.
}
},
});
return response;
}
在调用的地方 ,就要改写调用的方法了,类似下面这个样子;
原来可能是
let info = getInfo(id);
就要改写成下面这个样子:
getInfo(id,function(data){
console.log(data);
});
当然上面的例子里面只是为了说明问题,并没有去写错误处理一类的东西.
但是问题很明显.我们应该理解回调函数这个逻辑.而不是强制用顺序同步执行的逻辑让代码工作;