ajax return 注意事项

实际开发过程中,需要通过ajax获得后台数据,如果数据不满足业务要求,则中止执行后面代码。有时ajax回调函数明明执行了return语句,但系统仍然执行后面代码,这是什么原因呢?

为了探究问题原因,下面将几种常见写法逐一进行测试验证。

写法1

function test1() {
    var msg="test1";
    $.ajax({
        type:"POST",
        async:false,
        timeout:5000,
        dataType:"json",
        url:"?act=ok",
        success: function(d){
            return "ajax成功";
        },
        error:function(e){
            return "ajax异常";
        }
    });
    return msg;
}

执行方法test1(),返回值为【test1】

写法2

function test2() {
    var msg="test2";
    $.ajax({
        type:"POST",
        async:false,
        timeout:5000,
        dataType:"json",
        url:"?act=ok",
        success: function(d){
            msg="ajax成功";
            return msg+'2';
        },
        error:function(e){
            msg="ajax异常";
            return msg+'2';
        }
    });
    return msg;
}

执行方法test2(),返回值为【ajax异常】

写法3

function test3() {
    var msg="test3";
    $.ajax({
        type:"POST",
        async:false,
        timeout:5000,
        dataType:"json",
        url:"?act=ok",
        success: function(d){
            msg="ajax成功";
        },
        error:function(e){
            msg="ajax异常";
        }
    });
    return msg;
}

执行方法test3(),返回值为【ajax异常】

写法4

function test4() {
    var msg="test4";
    $.ajax({
        type:"POST",
        async:false,
        timeout:5000,
        dataType:"json",
        url:"?act=ok",
        success: function(d){
            msg="ajax成功";
            return "ajax成功2";
        },
        error:function(e){
            msg="ajax异常";
            return "ajax异常2";
        }
    });
    return msg;
}

执行方法test4(),返回值为【ajax异常】

写法5

function test5() {
    var msg="test5";
    var msg2="test5-2";
    $.ajax({
        type:"POST",
        async:false,
        timeout:5000,
        dataType:"json",
        url:"?act=ok",
        success: function(d){
            msg="ajax成功";
            return "ajax成功2";
        },
        error:function(e){
            msg="ajax异常";
            return "ajax异常2";
        }
    });
    return msg2;
}

执行方法test5(),返回值为【test5-2】

写法6

function test6() {
    var msg="test6";
    $.ajax({
        type:"POST",
        async:false,
        timeout:5000,
        dataType:"json",
        url:"?act=ok",
        success: function(d){
            msg="ajax成功";
            return "ajax成功2";
        },
        error:function(e){
            msg="ajax异常";
            return "ajax异常2";
        }
    });
    return "test6-2";
}

执行方法test6(),返回值为【test6-2】

结论

外层函数如果要获得 ajax 回调函数返回值,须满足以下条件

  1. ajax设置为同步方式
  2. 回调函数返回值必须赋值给外层函数变量,不能在回调函数内部通过字面量return
posted @ 2021-04-09 17:12  大大龄码农  阅读(1018)  评论(0编辑  收藏  举报