今天写了一个Ajax请求函数。但是在返回数据那里出现了错误,我试图从success回调中获取返回的数据,并将该数据分配给函数内的一个局部变量,然后return返回这个变量的值,但最后没有任何值返回。

代码如下:

function foo() {
    var result;

    $.ajax({
        url: \'...\',
        success: function(response) {
            result = response;
            // return response; // <- I tried that one as well
        }
    });

    return result;
}

var result = foo(); // It always ends up being `undefined`.

问题出在哪里?

 

首先我们必须了解AJAX中的异步和同步。

同步的意思是当JS代码加载到当前AJAX的时候会把页面里所有的代码停止加载,页面出去假死状态,当这个AJAX执行完毕后才会继续运行其他代码页面假死状态解除。 

而异步则这个AJAX代码运行中的时候其他代码一样可以运行。 

知道了AJAX的异步和同步的区别,相信以上问题就会迎刃而解。

因为上面我写的代码使用了jquery的ajax函数,而ajax函数默认使用异步发送请求,所以当运行AJAX请求代码时, 页面没有假死,而是继续执行下面的下面的代码,因此result变量什么值也没有。

如果要将AJAX请求的数据赋值给result,并返回result值,我们必须使用AHAX同步请求,代码如下:

function foo() {
    var result;

    $.ajax({
        url: \'...\',
        async: false,
        success: function(response) {
            result = response;
            // return response; // <- I tried that one as well
        }
    });

    return result;
}

从上面代码可以看出async: false用于设置Ajax请求是否为异步,false表示同步,true表示异步。

收藏 打印