为了账号安全,请及时绑定邮箱和手机立即绑定

关于在闭包中使用AJAX保存数据时,不执行success回调,直接return的问题。

关于在闭包中使用AJAX保存数据时,不执行success回调,直接return的问题。

慕尼黑5688855 2018-09-07 10:09:52
var initObj = getData()();function getData() {  var initData;   $.ajax({      type: "GET",      url: baseUrl + "Api/User/leftMenu",         dataType: "JSON",      async: false,      success: function(data) {         initData = data.data;       }   });  return function() {    return {      get: function() {        return initData;       }     }   } }console.log(initObj.get())get返回的数据为undefined;通过打断点发现有执行AJAX(设置了为同步),但是没有执行success的回调,所以initData没有被赋值;我想请求下来的数据保存起来由于权限判断,使用闭包是为了不让人很轻易的去修改他,请问是哪里出了问题,或者有什么更好的解决办法呢?
查看完整描述

1 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

应该不是异步导致的,你ajax将async写成了false,成了同步模式的ajax请求,这样操作也挺少见的,这样来说你的脚本就是同步执行了,那么原因可能有:

  • ①数据问题,可能本身data.data就没有数据

  • ②Jq封装的ajax的问题,的确有听说async无效的情况,不过忘记出处了(也可能是记错了),你可以进行测试一下(结果希望能告知我一声,嘻嘻)

  • ③因为变量提升的缘故,你在调用getData()()的时候它还没有上下文,但在后面的声明中有了,这就相当于

var b = val;val = 2;console.log( b );//undefined

其他的原因暂时没有想到


查看完整回答
反对 回复 2018-10-27
  • 1 回答
  • 0 关注
  • 623 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号