jquery,AJAX的请求应该怎么返回

现在更多的已经使用新的前端技术栈了,但是对于我这个陈年老后端来说,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);
            });

当然上面的例子里面只是为了说明问题,并没有去写错误处理一类的东西.

但是问题很明显.我们应该理解回调函数这个逻辑.而不是强制用顺序同步执行的逻辑让代码工作;

Show Comments
备案信息: 京ICP备20002019号