Ajax异步请求时函数返回值问题

// 这是调用函数
function superFunction(){
    alert("a");
    var res=subFunction();
    alert(res);

    alert("c");
}
// 被调用函数
function subFunction(){
    return "b";
}

在这样情况下,代码会按照顺序,从前到后依次执行(如果运气不错没有错误的话),即a、b、c。

但是,当异步情况时又会发生什么呢?

// 被调用函数
function subFunction(){
    $.ajax({
        ...
        success:function(data){
            return "b";
        }
    });
}

这时,运行的情况又是怎样的呢?

情况是这样的:a、undefined、c;

使用ajax这种异步方式,是无法直接获取返回值的,因为它的执行顺序无法保证,还没有来得及返回值就已经被调用...

那么问题来了,如何获取异步函数返回值?

那就是 —  回调。

其实不仅仅是在 js中,在其它语言环境中,回调都是处理异步的最好方式。这是一种通用的技巧,比如:如果你熟悉UNIX的IO模型,就应该知道它处理异步的方式就是用回调实现的。

js由于是弱类型语言,实现回调看起来更简单一些。

// 这是回调函数
function ready(obj){
    alert(obj);
}

// 这是异步函数
function async(){
    $.ajax({
        ...
        success:function(data){
            ready(data);
        }
    });
}

// 调用异步函数
async();

这样获取 data 就可以了。

原文链接:HelloWeb前端网 » Ajax异步请求时函数返回值问题 » 感谢您的浏览,希望能有所帮助。

欢迎您加入“Helloweb” 学习交流群:HelloWeb-学习交流群 196291215 共同交流并结识同行,在这里说出您的收获与感想或有什么不同的观点,我们期待您的留言,分享,让我们一起进步!

喜欢 ()or分享