今天写了一个Ajax请求函数。但是在返回数据那里出现了错误,我试图从success回调中获取返回的数据,并将该数据分配给函数内的一个局部变量,然后return返回这个变量的值,但最后没有任何值返回。
代码如下:
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
result = response;
// return response; //
}
});
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; //
}
});
return result;
}
从上面代码可以看出async: false用于设置Ajax请求是否为异步,false表示同步,true表示异步。