解决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,因为外层函数压根就没有定义返回值。
所以第一种写法虽然没有语法错误,但是在逻辑上却行不通。


Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐