【JQuery 】ajax 数据请求成功 用return返回数据后 得到的是undefined

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


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢牛马 不怕困难

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值