search

Home  >  Q&A  >  body text

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

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

高洛峰高洛峰3087 days ago815

reply all(3)I'll reply

  • 三叔

    三叔2016-11-09 11:17:38

    简单的来不就得了。搞这么复杂

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    var initObj;

    ;(function(){

      $.ajax({

          type: "GET",

          url: baseUrl + "Api/User/leftMenu",

          dataType: "JSON",

          async: false,

          success: function(data) {

            initObj = data.data;

          }

      });

    })();


    reply
    0
  • 代言

    代言2016-11-09 11:17:18

    按照你写的方法,即使AJAX成功也不能保证返回接口不会被修改,因为你get返回的数据是个JSON对象。最好只返回你感兴趣的数据,比如get: function() { return initData.isRoot; }

    reply
    0
  • 三叔

    三叔2016-11-09 11:17:02

    因为ajax是异步的而你直接拿了还没被ajax异步函数赋值的变量出来。异步不用回调你是不知道什么时候才拿到数据的。

    reply
    0
  • Cancelreply