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

查看:83
本文介绍了javascript - 关于在闭包中使用AJAX保存数据时,不执行success回调,直接return的问题。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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没有被赋值;
我想请求下来的数据保存起来由于权限判断,使用闭包是为了不让人很轻易的去修改他,请问是哪里出了问题,或者有什么更好的解决办法呢?

解决方案

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

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

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

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

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

其他的原因暂时没有想到

这篇关于javascript - 关于在闭包中使用AJAX保存数据时,不执行success回调,直接return的问题。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆