关于在闭包中使用AJAX保存数据时,不执行success回调,直接return的问题。
高洛峰
高洛峰 2016-11-09 11:16:44
0
3
701
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没有被赋值;我想请求下来的数据保存起来由于权限判断,使用闭包是为了不让人很轻易的去修改他,请问是哪里出了问题,或者有什么更好的解决办法呢?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆 (3)
三叔

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

var initObj; ;(function(){ $.ajax({ type: "GET", url: baseUrl + "Api/User/leftMenu", dataType: "JSON", async: false, success: function(data) { initObj = data.data; } }); })();


    代言

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

      三叔

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

        最新下載
        更多>
        網站特效
        網站源碼
        網站素材
        前端模板
        關於我們 免責聲明 Sitemap
        PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!