解决JQuery ajax 数据请求成功 用return返回数据后 得到的是undefined问题
问题描述:
我用jQuery $.ajax({})请求数据,把它封装成函数,得到的函数返回值是undefinied。
解决办法:
将返回值放在回调函数外面返回。
1 原方法: 在ajax回调函数中返回数据
直接在回调函数中返回响应值,得到的是undefined
function test() {
$.ajax({
url: '',
data: {
'sign': 0,
},
dataType: 'json',
async: false,
success: function (res) {
if (res) {
return res.data
}
else {
return []
}
}
});
}
2 设置全局变量 回调函数只修改全局变量
设置全局变量,回调函数只修改全局变量的值,此时可以得到正确的返回值
function test() {
var ans = [];
$.ajax({
url: '',
data: {
'sign': 0,
},
dataType: 'json',
async: false,
success: function (res) {
if (res) {
ans = res.data;
}
else {}
}
});
return ans
}
3 问题溯源
当我们用函数对jQuery ajax方法封装时,回调函数虽然是匿名的,但却是单独的内存空间,此时虽然从回调函数中返回了响应值,但是当回调函数返回的那一刻,回调函数的内存空间也会被回收,但是外层函数的执行还没有结束。当我们获取外层函数的返回值时,只能是得到undefined,因为外层函数压根就没有定义返回值。
所以第一种写法虽然没有语法错误,但是在逻辑上却行不通。